2017-07-10 34 views
0

我试图找到所有变种大礼包is_masterfalse但是ransack没有按预期工作。我使用ransack的原因是我可以在spree api上运行这个搜索,所以我可以提出像/api/v1/variants?q[is_master_true]='0'这样的请求来获取所有非主变体。大杂烩搜索spree忽略真/假

documentation

>> 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

+0

你的问题是什么? – sawa

+0

@sawa为什么is_master_false被忽略而不是创建一个查询来查找所有记录is_maser = false – Qwertie

回答

1

@Qwertie:对于ransack搜索,您需要首先将您要执行ransack搜索的所有属性列入白名单。

目前,在Variant model只有重量SKU列入白名单。

所以,你需要加入白名单is_master场自己

对于做只是为创建大礼包中的变体的装饰/名称为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')

现在重新启动您的服务器或导轨控制台并尝试一下。

+0

这就解决了它。谢谢您的帮助! – Qwertie

+0

很高兴为您效劳。 –