簡體   English   中英

如何使用will_paginate在視圖和控制器上使用sort_by或order_by?

[英]How to use sort_by or order_by on view and controller with will_paginate?

在我的rails應用程序中,我通過分頁來限制頁面上顯示的房間數量,我希望允許用戶對結果進行排序/排序到房間模型的不同列。 我想我需要一個下拉菜單來執行此操作,然后通過實例變量將此數據傳遞給我的rooms_controller。

如何根據列對具有select標簽的房間進行排序,以及在相應的控制器中需要做什么才能使其工作?

目前我正在使用它來下拉菜單:

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:string,address:string,nightly_price:integer和has_many reviews。 我的評論模型屬於房間。 我使用geocoder gem作為房間的位置。

我搜索了分配並嘗試了多種方法來完成這項工作,我無法想出這一點。 有關如何解決這個問題的任何提示,我會非常高興! 如果您需要更多信息,請告訴我。

就像是:

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)

考慮使用單獨的范圍進行排序或使用某些gem。 例如hansack

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM