我在事件页面上有一个'Sort By'下拉列表,用户可以在其中查看多个事件,并且我想允许用户按名称(Alphebetical),Date(Created_At)和可能(Number)对事件进行排序参加高/低的人。
我怎样才能做到这一点?我猜测默认范围:order,Event.where(:name,ASC)例如但我不确定,因为我之前从未这样做过。另外我如何在下拉列表中显示/使用范围?
答案 0 :(得分:2)
我推荐你非常有用的宝石has_scope: https://github.com/plataformatec/has_scope
你可以用它做什么:
class Event < ActiveRecord::Base
scope ordered, lambda do |attribute, order|
return where("FALSE") unless self.attribute_names.include?(attribute.to_s)
order(attribute.to_sym, order.to_sym
end
class EventsController < ApplicationController
has_scope :ordered do |controller, scope, value|
scope.ordered(value, :desc)
end
# view
options = [['Name', 'name'], ['Date', 'date']]
select_tag("ordered", options_for_select(options, selected: params[:ordered]), onchange: "window.location.href = window.location.origin + window.location.pathname + '?ordered=' + $(this).val();"
我没有测试视图,你可能需要稍微更改一下代码。 javascript重定向不支持额外的GET参数!
答案 1 :(得分:0)
看看RailsCasts
http://railscasts.com/episodes/240-search-sort-paginate-with-ajax
这还包括pagination
和简单搜索。但是,您可以从中获取您正在寻找的部分。
答案 2 :(得分:0)
对于活动记录,您只需将.order(符号)附加到活动记录查询。
你可以做的字母。
Object.where(ARRGUMENT).order(:name)
或所有
Object.order(:name)
你不需要使用一个范围来解决这个问题。
如果要创建交互式表,则可能需要考虑使用Javascript解决方案。这是对我来说最好的一个。
我已经使用并且目前使用这个宝石取得了巨大的成功。