Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 疯狂搜捕,忽略真/假_Ruby On Rails_Ruby_Spree_Ransack - Fatal编程技术网

Ruby on rails 疯狂搜捕,忽略真/假

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中的所有变体,其中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 \"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