我有一个用Rails和mongoDB实现的站点来提交,阅读和更新项目
网站上有几个不同的区域,您可以根据搜索关键字或不同的查询方法查看项目并对其进行过滤。
例如:在主页上有一个要排序的类别列表。 '使用案例','状态','等级'。当用户点击“用例”时按钮列表将显示更多特定类别的用例,如电子商务',如果他们点击div将填充具有等于电子商务的用例的项目。从这一点开始,他们可以点击特定项目'详细信息'按钮,将显示项目的所有属性。
在这个详细的'查看我有一个下一个和后退按钮。现在,它通过递增和递减项目ID号来滚动项目数据库
我希望下一个和后退按钮能够滚动显示他们在填充的div中显示的列表。可以通过名为@items
的实例变量访问它,该变量在项目控制器中初始化,但即使保存为全局变量,也无法在详细信息视图中看到...
<登记/>
我想到的唯一选择是将项目列表作为URL参数传递 - 但这似乎是一种混乱的方式。
有没有其他方法可以在不同的视图之间传递实例变量?
示例代码:
item_controller.rb :
def list
@items = Item.asc(:id)
end
list.html.erb :
<tbody>
<% @items.each do |item| %>
<% $list = @items%>
<tr>
<td><%= item.name %></td>
<td><% item.Use_Cases.each do |u| %>
<ul>
<li><%= u %></li>
</ul>
<% end %>
</td>
<td><%= item.Level %></td>
<td><%= item.Status %></td>
<td><%= link_to item, class: 'btn btn-default' do %>
<span class="glyphicon glyphicon-eye-open"></span> Details
<% end %>
</td>
</tr>
<% end %>
</tbody>
show.html.erb - 滚动按钮:
<div class="panel-footer">
<%if @item.id != @first_id %>
<% #need to change to scroll to previous in $list %>
<%= link_to item_path(:id => (@item.id-1)), class: 'btn btn-default' do %>
<span class="glyphicon glyphicon-menu-left"></span> Back
<% end %>
<% end %>
<%if @item.id != @last_id %>
<% #need to change to scroll to next in $list %>
<%= link_to item_path(:id => (@item.id+1)), class: 'btn btn-default' do %>
Next <span class="glyphicon glyphicon-menu-right"></span>
<% end %>
<% end %>
</div>
答案 0 :(得分:0)
使用相同的范围来检索项目列表和单个项目及其下一个和上一个项目。
# item_controller.rb
def list
@items = items_scope
end
def show
@item = items_scope.find(params[:id])
@next_item_id = items_scope.select(:id).where("id > ?", params[:id]).first
@previous_item_id = items_scope.select(:id).where("id < ?", params[:id]).last
end
private
def items_scope
# this scope might depend on url parameters which, for example, present current chosen category
# `order("id ASC")` is a very important part. it makes this solution work
Item.order("id ASC").any_other_scopes_or_conditions_depending_on_chosen_category
end
在视图中:
<%= link_to item_path(:id => @next_item_id) ...
<%= link_to item_path(:id => @previous_item_id) ...