2016-03-21 10 views
0

私は、RailsとmongoDBで実装されたサイトを持ち、アイテムを送信、読み込み、更新します。
サイトには、アイテムを表示したり、検索キーワードやさまざまなクエリ方法に基づいてフィルタを適用できる領域があります。

例:ホームページには、並べ替えるカテゴリのリストがあります。 'ユースケース'、 'ステータス'、 'レベル'ユーザーが「ユースケース」ボタンをクリックすると、「Eコマース」などのユースケースのリストが表示されます。ユースケースがEメールに等しいアイテムが表示された場合は、コマース特定のアイテムのこの時点から、アイテムのすべてのプロパティを表示する[Details]ボタンをクリックすることができます。
この「詳細」ビューには、次と戻るボタンがあります。今すぐアイテムID番号を増減することによってアイテムのデータベースをスクロールします。
次のボタンと戻るボタンが、表示されたリストをスクロールできるようにしたいと思います。アイテムコントローラで初期化され、グローバル変数として保存されていても詳細ビューには表示されない@itemsというインスタンス変数からアクセスできます。

私が考えている唯一のオプションはリストを渡すことですのアイテムをURLパラメータとして使用していますが、それはそれを行うための面倒な方法のようです。
異なるビュー間でインスタンス変数を渡す方法はありますか?

例コード: item_controller.rb


rails&mongoid - 特定のレコードグループをスクロール

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> 


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>&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> 

答えて

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 

:このsitutationのために

<%= link_to item_path(:id => @next_item_id) ... 
<%= link_to item_path(:id => @previous_item_id) ... 
+0

、このソリューションは動作しません - 私はに 'list.html.erb'ビューから' items'リスト@に合格できるようにする必要があります'show.html.erb'ビュー – Gcap

関連する問題