- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
请在这方面需要一些帮助。
我有一个模型照片,它有一个列 zone_id 和 category_id。
带类别的照片和带 View 的照片呈现相同的索引 View (照片索引)。
我想要一个侧边栏,这取决于您是在按 View 的照片索引中还是在按类别的照片索引中显示一个下拉列表。
因此,如果您单击现代类别的照片,我希望边栏呈现一个下拉菜单“按区域搜索”
在另一种情况下,如果您在按区域的照片索引 View 中,我希望我的 side bat 呈现一个下拉菜单“按类别搜索”。
我知道这是一个 if/unless,但不知道如何告诉条件“嘿伙计,我在按类别分类的照片中,所以你需要渲染照片区域下拉菜单”。
请帮忙!
def type
@photos = Photo.by_category(params[:category_id]).paginate(:page => params[:page])
render :index
end
def zone
@photos = Photo.by_zone(params[:zone_id]).paginate(:page => params[:page])
render :index
end
# I've got rid of Photo.with_user_avatar ...
def search
@photos = Photo.all
@photos = @photos.where('category_id = ?', params[:category_id]) if params[:category_id]
@photos = @photos.where('zone_id = ?', params[:zone_id]) if params[:zone_id]
@photos = @photos.paginate(:page => params[:page])
render :index
end
get 'spots/:category_id', to: "photos#type", as: :spots_category
get 'spots/zonas/:zone_id', to: "photos#zone", as: :spots_zone
get 'spots/:category_id/:zone_id', to: "photos#search", as: :spots_category_zone
get 'spots/zonas/:zone_id/:category_id', to: "photos#search", as: :spots_zone_category
<% if @photos.first.zone %>
<h6 class="bold medium uppercase grey">Seleccionar estilo para: </br>
<span class="green big"><%= (@photos.first.zone.name ? "#{@photos.first.zone.name}": "") %></h6></span>
<!-- One dropdown-->
<ul class="listnone bold lightgrey">
<li><%= link_to "Moderno", spots_category_zone_path(1,@photos.first.zone) %>
<span class="spot_count small right"><%= @photos.count %></span></li>
<li><%= link_to "Clásico", spots_category_zone_path(2,@photos.first.zone) %>
<span class="spot_count small right"><%= @photos.count %></span></li>
<li><%= link_to "Industrial & Loft", spots_category_zone_path(3,@photos.first.zone) %>
<span class="spot_count small right"><%= @photos.count %></span></li>
<li><%= link_to "Minimalista", spots_category_zone_path(4,@photos.first.zone) %>
<span class="spot_count small right"><%= @photos.count %></span></li>
<li><%= link_to "Rústico", spots_category_zone_path(5,@photos.first.zone) %>
<span class="spot_count small right"><%= @photos.count %></span></li>
<li><%= link_to "Contemporáneo", spots_category_zone_path(6,@photos.first.zone) %>
<span class="spot_count small right"><%= @photos.count %></span></li>
<li><%= link_to "Étnico", spots_category_zone_path(7,@photos.first.zone) %>
<span class="spot_count small right"><%= @photos.count %></span></li>
<li><%= link_to "Art Deco", spots_category_zone_path(8,@photos.first.zone) %>
<span class="spot_count small right"><%= @photos.count %></span></li>
<li><%= link_to "Ecléctico", spots_category_zone_path(9,@photos.first.zone) %>
<span class="spot_count small right"><%= @photos.count %></span></li>
</ul>
<% else %>
<!-- The other dropdown -->
<a href="#" data-dropdown="drop1" data-options="align:right" class="button dropdown"></i> Quiero ver spots de...</a><br>
<ul id="drop1" data-dropdown-content class="f-dropdown" data-options="align:right">
<li><%= link_to "Baños", spots_zone_path(1) %></li>
<li><%= link_to "Cocinas", spots_zone_path(2) %></li>
<li><%= link_to "Cuartos de estar", spots_zone_path(3) %></li>
<li><%= link_to "Dormitorios", spots_zone_path(4) %></li>
<li><%= link_to "Exteriores", spots_zone_path(5) %></li>
<li><%= link_to "Hostelería", spots_zone_path(6) %></li>
<li><%= link_to "Infantil", spots_zone_path(7) %></li>
<li><%= link_to "Oficinas", spots_zone_path(8) %></li>
<li><%= link_to "Salones", spots_zone_path(9) %></li>
</ul>
<% end %>
非常感谢!
最佳答案
我们又来了!两种简单的方法。
你可以设置一个等于 Action 的变量:
def type
@photos = Photo.by_category(params[:category_id]).paginate(:page => params[:page])
@action = 'type'
render :index
end
def zone
@photos = Photo.by_zone(params[:zone_id]).paginate(:page => params[:page])
@action = 'zone'
render :index
end
在你看来
<% if @action == 'type' %>
<%= render 'sidebar/zone_menu' %>
<% elsif @action == 'zone' %>
<%= render 'sidebar/category_menu' %>
<% end %>
或者您可以跳过变量并在您的 View 中调用 params[:action]
:
<% if params[:action] == 'type' %>
<%= render 'sidebar/zone_menu' %>
<% elsif params[:action] == 'zone' %>
<%= render 'sidebar/category_menu' %>
<% end %>
就个人而言,我会选择变量。感觉就是那种属于controller的逻辑。您的里程可能会有所不同。
我还将菜单放入部分(制作一个“侧边栏”文件夹,分别创建 _zone_menu.html.erb
和 _category_menu.html.erb
)并加载他们那样,但你当然可以把完整的菜单放在 View 中。如果你打算做局部变量,我发现最好的做法是通过传递局部变量来保持实例变量不在局部变量中:
<%= render 'sidebar/category_menu', locals: { photo_count: @photos.count, current_zone: @photos.first.zone } %>
然后在部分中,将 @photos.count
和 @photos.first.zone
替换为 photo_count
和 current_zone
.
关于ruby-on-rails - 根据我所处的 View 制作 if 条件 (Rails 4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23661773/
我是一名优秀的程序员,十分优秀!