Ruby on Rails范围:错误的参数数量(1对2)

时间:2014-08-17 11:59:21

标签: ruby-on-rails sorting search scope

我有一个User模型,我使用范围搜索用户+对结果进行排序。例如,选择名称以“...”开头的用户按升序排列。这个范围工作正常:

scope :like, ->(like) { where("name like ?", "#{like}%")}
scope :order_by, ->(order_by) { order("#{order_by} ASC") }

但是如果我想在选定的字段上对用户进行排序并选择订单类型(ASC / DESC)呢?我试过这样的事情:

scope :like, ->(like, filter) { where("#{filter} like ?", "#{like}%")}
scope :order_by, ->(order_by) { order("#{order_by} #{order_type}") }

...但发生此错误:wrong number of arguments (1 for 2)。 但是,服务器日志中的所有参数似乎都是正确的:

 Parameters: {"utf8"=>"✓", "filter"=>["email"], "like"=>"ex", "order_by"=>"email",
 "order_type"=>"DESC", "commit"=>"  Search  "}

我怎样才能让它发挥作用?感谢您的支持!

PS:users_controller.rb:

include Filterable
...
  def index
    @users = User.filter(params.slice(:filter, :like, :order_by)).paginate(page: params[:page], per_page: 40)
  end

filterable.rb 是所有过滤逻辑所在的模块:

  extend ActiveSupport::Concern

  module ClassMethods
    def filter(filtering_params)
      results = self.where(nil)
      filtering_params.each do |key, value|
        results = results.public_send(key, value) if value.present?
      end
      results
    end
  end

0 个答案:

没有答案