gpt4 book ai didi

ruby-on-rails - 添加使用具有多个条件的范围的自定义 ransacker

转载 作者:行者123 更新时间:2023-12-05 01:06:38 26 4
gpt4 key购买 nike

我正在使用 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_attr: val2) # should return MyModel.query2

有人对此有什么想法吗?

最佳答案

有一个摘录,来自 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

在您看来(根据 https://github.com/activerecord-hackery/ransack#ransacks-search_form_for-helper-replaces-form_for-for-creating-the-view-search-form ):
= search_form_for @q do |f|
= f.search_field :by_name, value, [['Value 1', val1], ['Value 2', val2]]

为避免在创建表单时使用显式数组,请使用不同的助手,例如 options_from_collection_for_select .

你可以写 MyModel.ransack(by_name: value).results在您的代码中也是如此。

关于ruby-on-rails - 添加使用具有多个条件的范围的自定义 ransacker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19906182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com