我正在尝试在is_master
为false
的spree中查找所有变体但是ransack未按预期工作。我使用ransack的原因是我可以在spree api上运行此搜索,因此我可以发出/api/v1/variants?q[is_master_true]='0'
之类的请求来获取所有非主变种。
>> User.ransack(awesome_false: '1').result.to_sql
=> SELECT "users".* FROM "users" WHERE ("users"."awesome" = 'f')
实践中
> 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
所在的记录?
答案 0 :(得分:1)
@Qwertie:对于搜索搜索,您需要先将所有要执行搜索搜索的属性列入白名单。
目前,仅Variant model 权重sku 列入白名单。
因此您需要自己将 is_master 字段列入白名单
只需在名为variant_decorator.rb的spree / models中为变体创建一个装饰器并写入
Spree::Variant.whitelisted_ransackable_attributes.push('is_master')
或者在spree.rb中
添加DECLARE @SQLString NVARCHAR(MAX);
SET @SQLString = '<query>'
EXEC (@SQLString);
现在重新启动服务器或rails控制台并试用它。