Ruby on rails 添加使用多个条件的作用域的自定义ransacker

Ruby on rails 添加使用多个条件的作用域的自定义ransacker,ruby-on-rails,ransack,Ruby On Rails,Ransack,我使用的是gem,我有一个模型的作用域如下: scope :by_attr, ->(attr) { case attr when val1 query1 when val2 query2 else all end } 我不明白,我怎么能写一个使用这个范围的洗劫者。例如,我想要这种行为: MyModel.search(by_attr: val1) # should return MyModel.query1 MyModel.search(by_a

我使用的是gem,我有一个模型的作用域如下:

scope :by_attr, ->(attr) {
  case attr
  when val1
    query1
  when val2
    query2
  else
    all
  end
}
我不明白,我怎么能写一个使用这个范围的洗劫者。例如,我想要这种行为:

MyModel.search(by_attr: val1) # should return MyModel.query1
MyModel.search(by_attr: val2) # should return MyModel.query2

有人对此有什么想法吗?

如果有人有像我这样的问题,在搜索中有一个有趣的PR,它允许在
搜索中使用作用域作为键:

有一个摘录,来自:

在您的模型中:

scope :by_name, ->(name) {
  where name: name
}

def self.ransackable_scopes(auth_object = nil)
  [:by_name]
end
在您看来(根据):

要避免在创建表单时使用显式数组,请使用不同的帮助程序,例如选择的
options\u from\u collection\u


您可以在代码中编写
MyModel.ransack(按名称:value)。结果

您成就了我的一天。我花了两年时间才找到它,最后我找到了!要将其与ActiveAdmin一起使用,请执行以下操作:scope:by_name_eq,->(name){where(name:name)}def self.ransackable_scopes(auth_object=nil)[:by_name_eq]end#在AA过滤器中:by_name_eq,并将scope用作Ransack过滤器!是的。我可以证实,这对我也有帮助。美好的
= search_form_for @q do |f|
  = f.search_field :by_name, value, [['Value 1', val1], ['Value 2', val2]]