Den*_*rov 3 ruby-on-rails ransack
我正在使用Ransack gem,我有一个模型,其范围如下:
scope :by_attr, ->(attr) {
case attr
when val1
query1
when val2
query2
else
all
end
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚,我怎么能写一个使用这个范围的ransacker.例如,我想要这种行为:
MyModel.search(by_attr: val1) # should return MyModel.query1
MyModel.search(by_attr: val2) # should return MyModel.query2
Run Code Online (Sandbox Code Playgroud)
有人对此有一些想法吗?
有一个摘录,来自https://github.com/activerecord-hackery/ransack/pull/288:
在你的模型中:
scope :by_name, ->(name) {
where name: name
}
def self.ransackable_scopes(auth_object = nil)
[:by_name]
end
Run Code Online (Sandbox Code Playgroud)
= search_form_for @q do |f|
= f.search_field :by_name, value, [['Value 1', val1], ['Value 2', val2]]
Run Code Online (Sandbox Code Playgroud)
为避免在创建表单时使用显式数组,请使用不同的帮助程序,例如options_from_collection_for_select.
您也可以MyModel.ransack(by_name: value).results在代码中编写代码.
| 归档时间: |
|
| 查看次数: |
2042 次 |
| 最近记录: |