2016-10-21 9 views
1

私のレールアプリケーションでは、ページ上に表示されるルームの量をページ分割によって制限しています。結果を並べ替えたり並べ替えたりすることができます。私は、これを行うには、ドロップダウンメニューが必要と思うし、おそらくインスタンス変数を介して私のrooms_controllerにこのデータを渡します。will_paginateでビューとコントローラでsort_byまたはorder_byを使用する方法は?

選択タグを使用して部屋を並べ替えるにはどうすればよいですか?この機能を実現するには、対応するコントローラーで何をする必要がありますか?

index.html.erb

... 
... 
<%= will_paginate @rooms %> 

<div id="order-by"> 
    <select> 
     <option value="asc">Distance</option> 
     <option value="asc">Name</option> 
     <option value="asc">Price (low to high)</option> 
     <option value="des">Price (high to low)</option> 
     <option value="asc">Reviews</option> 
     </select> 
</div> 

rooms_controller.rb

... 
... 
    def index 
    @rooms = Room.paginate :page => params[:page], :per_page => 12 
    end 
... 

マイルーム:私はドロップダウンメニューのためにこれを使用しています現時点では

モデルはlisting_name:文字列、アドレス:文字列、nightly_price:整数、has_many re再生回数私のレビューモデルはbelongs_toルームです。私は部屋の場所にジオコーダーの宝石を使用しています。

私はこの記事を検索し、この仕事をするために複数のことを試みましたが、私はこのことを理解できません。これを解決するためのヒントについては、私は本当に幸せです! さらに詳しい情報が必要な場合は、私に知らせてください。

+0

ページ内の要素のみ、またはルーム内のすべての項目を注文しますか? すべてのエントリを注文する場合は、ページを更新するか、ajaxを使用して値を読み込むことができます。 –

答えて

2

のような何か:

index.html.erb

<%= will_paginate @rooms %> 

<div id="order-by"> 
    <form> 
    <select name="sort"> 
     <option value="distance">Distance</option> 
     <option value="name">Name</option> 
     <option value="price">Price (low to high)</option> 
     <option value="price desc">Price (high to low)</option> 
     <option value="review">Reviews</option> 
    </select> 

    <input type="submit" value="Sort"/> 
    </form> 
</div> 

rooms_controller.rb

def index 
    @rooms = Room.order(params[:sort]).paginate(page: params[:page], per_page: 12) 
end 

またparams[:sort]のみ利用可能な値に含まれていることを確認する必要があり、 例:

sort = params[:sort] 
sort = nil unless sort.in?(['distance', 'name', 'price', 'price desc', 'review']) 
@rooms = Room.order(sort).paginate(page: params[:page], per_page: 12) 

ソートまたはいくつかの宝石用に別のスコープを使用することを検討してください。例えばransack

+1

ありがとうございました!!!これは私に割り当てを助けた!私はまだ2つの列 "コメント:テキスト"と "星:整数"を持つ "レビューモデル"に従って並べ替える方法を見つけなければならないし、ジオコーダーの宝石と "距離"。しかし、私は最終的に出発点があります!ありがとうございました!これは私にナッツをもたらした! ;) – trickydiddy

関連する問題