2017-07-10 14 views
0

is_masterfalseであるが、ransackが期待どおりに機能していない場合、すべての変種を見つけようとしている。私がransackを使用している理由は、私がこの検索を実行可能なapi上で実行できるようにするためです。/api/v1/variants?q[is_master_true]='0'のような要求をして、すべての非マスターバリアントを取得することができます。詐欺でransack search true/falseを無視して

> 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で無視される。実際にはdocumentation

>> User.ransack(awesome_false: '1').result.to_sql 
=> SELECT "users".* FROM "users" WHERE ("users"."awesome" = 'f') 

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'" 
012作品

is_master_false: '1'は、レコードを検索する代わりにSQLクエリに何も行わないのはなぜですか?is_master = false

+0

あなたの質問は何ですか? – sawa

+0

@sawaなぜis_master_falseは、is_maser = falseのすべてのレコードを見つけるクエリを作成するのではなく、無視されます。 – Qwertie

答えて

1

@Qwertie:ransack検索では、まずranslock searchを実行するすべての属性をホワイトリストに登録する必要があります。

現在のところ、Variant modelの重みのskuはホワイトリストに登録されています。

だから、あなただけの名前variant_decorator.rbと酒宴/モデルにおけるバリエーションのデコレータを作成し、

Spree::Variant.class_eval do 
    ### WHITELISTED ATTRIBUTES ### 
    self.whitelisted_ransackable_attributes |= ['is_master'] 
end 

またはspree.rbでの書き込み行うために、自分自身に

is_masterフィールドをホワイトリストに登録する必要があります add Spree::Variant.whitelisted_ransackable_attributes.push('is_master')

ここで、サーバーまたはレールコンソールを再起動して試してみてください。

+0

それが修正されました。助けてくれてありがとう! – Qwertie

+0

あなたをお待ちしております。 –

関連する問題