Ruby on rails 疯狂搜捕,忽略真/假
我正在努力寻找spree中的所有变体,其中is_master为false,但ransack未按预期工作。我使用ransack的原因是,我可以在spree api上运行此搜索,这样我就可以发出像/api/v1/variants?q[is_master_true]=“0”这样的请求来获取所有非master variants 在 实际上Ruby on rails 疯狂搜捕,忽略真/假,ruby-on-rails,ruby,spree,ransack,Ruby On Rails,Ruby,Spree,Ransack,我正在努力寻找spree中的所有变体,其中is_master为false,但ransack未按预期工作。我使用ransack的原因是,我可以在spree api上运行此搜索,这样我就可以发出像/api/v1/variants?q[is_master_true]=“0”这样的请求来获取所有非master variants 在 实际上 > Spree::Variant.ransack(is_master_false: '1').result.to_sql => "SELECT \"spr
> Spree::Variant.ransack(is_master_false: '1').result.to_sql
=> "SELECT \"spree_variants\".* FROM \"spree_variants\" WHERE \"spree_variants\".\"deleted_at\" IS NULL"
在sql中忽略is_master_false
另一个类似sku_eq的搜索很好
> Spree::Variant.ransack(sku_eq: '17636').result.to_sql
=> "SELECT \"spree_variants\".* FROM \"spree_variants\" WHERE \"spree_variants\".\"deleted_at\" IS NULL AND \"spree_variants\".\"sku\" = '17636'"
为什么is_master_false:“1”对创建的sql查询不做任何操作,而不是查找is_master=false的记录?@Qwertie:对于ransack搜索,您需要首先将要执行ransack搜索的所有属性列为白名单 目前,只有重量sku被列入白名单 所以你需要把自己列为白名单 为此,只需在spree/models中为variant创建一个名为variant_decorator.rb的decorator并编写
Spree::Variant.class_eval do
### WHITELISTED ATTRIBUTES ###
self.whitelisted_ransackable_attributes |= ['is_master']
end
或者在spree.rb中
添加Spree::Variant.whitelisted\u ransackable\u属性。push'is\u master'
现在重新启动服务器或rails控制台并进行尝试。您的问题是什么?@sawa为什么会忽略is\u master\u false,而不是创建一个查询来查找is\u maser=false所在的所有记录这一问题得到了解决。谢谢你的帮助!很高兴帮助你。
Spree::Variant.class_eval do
### WHITELISTED ATTRIBUTES ###
self.whitelisted_ransackable_attributes |= ['is_master']
end