在我的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:字符串,地址:字符串,nightly_price:整数和has_many评论。我的评论模型属于房间。我使用geocoder gem作为房间的位置。
我搜索了分配并尝试了多项工作来完成这项工作,我无法想出这一点。有关如何解决这个问题的任何提示,我会非常高兴! 如果您需要进一步的信息,请告诉我。
答案 0 :(得分:3)
类似的东西:
<强> 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]
仅包含在可用值中,
e.g:
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。例如ransack