Rails & Mongoid - 滚动浏览特定的记录组

rails & mongoid - scroll through specific group of records

本文关键字:记录 浏览 滚动 amp Mongoid Rails      更新时间:2023-09-26

我有一个用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>&nbsp;Details
            <% end %>
    </td>
      </tr>
    <% end %>
  </tbody>


显示.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>&nbsp;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&nbsp;<span class="glyphicon glyphicon-menu-right"></span>
        <% end %>
    <% end %>
  </div>

使用相同的范围检索项目列表和单个项目及其下一个和上一个项目。

 # 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) ...