无视地疯狂搜查 true/false
ransack search in spree ignoring true/false
我正在尝试在 is_master
为 false
的 spree 中查找所有变体,但搜查没有按预期工作。我使用 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"
is_master_false
在sql
中被忽略
另一个类似 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:对于搜查搜索,您需要首先将要执行搜查搜索的所有属性列入白名单。
目前,在 Variant model 中只有 weight sku 被列入白名单。
所以你需要自己将is_master字段列入白名单
为此,只需为 spree/models 中的变体创建一个装饰器,名称为 variant_decorator.rb 并写入
Spree::Variant.class_eval do
### WHITELISTED ATTRIBUTES ###
self.whitelisted_ransackable_attributes |= ['is_master']
end
或在spree.rb
添加 Spree::Variant.whitelisted_ransackable_attributes.push('is_master')
现在重新启动您的服务器或 rails 控制台并尝试一下。
我正在尝试在 is_master
为 false
的 spree 中查找所有变体,但搜查没有按预期工作。我使用 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"
is_master_false
在sql
另一个类似 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:对于搜查搜索,您需要首先将要执行搜查搜索的所有属性列入白名单。
目前,在 Variant model 中只有 weight sku 被列入白名单。
所以你需要自己将is_master字段列入白名单
为此,只需为 spree/models 中的变体创建一个装饰器,名称为 variant_decorator.rb 并写入
Spree::Variant.class_eval do
### WHITELISTED ATTRIBUTES ###
self.whitelisted_ransackable_attributes |= ['is_master']
end
或在spree.rb
添加 Spree::Variant.whitelisted_ransackable_attributes.push('is_master')
现在重新启动您的服务器或 rails 控制台并尝试一下。