私はレール上に3.2.21、ルビーバージョンは2.0です条件付きデフォルトスコープをレールに入れることは可能ですか?
私の要件は、特定のモデルのロールベースの条件付きデフォルトスコープです。例えば
は
if role == 'xyz'
default_scope where(is_active: false)
elsif role == 'abc'
default_scope where(is_active: true)
end
私はレール上に3.2.21、ルビーバージョンは2.0です条件付きデフォルトスコープをレールに入れることは可能ですか?
私の要件は、特定のモデルのロールベースの条件付きデフォルトスコープです。例えば
は
if role == 'xyz'
default_scope where(is_active: false)
elsif role == 'abc'
default_scope where(is_active: true)
end
何がプログラミングで不可能なことはありませんログインしているユーザーの属性として役割変数を考えます。
default_scope
を使用することは、一般的には悪い考えです(多くの記事がトピックに書かれています)。その後、
scope :based_on_role, lambda { |role|
if role == 'xyz'
where(is_active: false)
elsif role == 'abc'
where(is_active: true)
end
}
そして、次のようにそれを使用します:
あなたは現在のユーザーのatributeを使う、という場合は、スコープの引数として渡すことができ
Model.based_on_role(current_user.role)
追記:Railsの3.2.xのを - 真剣に... ...
default_scope where(
case role
when 'xyz' then { is_active: false }
when 'abc' then { is_active: true }
else '1 = 1'
end
)
また、Andrey Deinekoの回答を読んでください。特に、デフォルトの範囲usag e。
私は、モデル ' –
の'未定義の変数またはメソッドの役割 'を投げてしまうと思います。あなたの答えには、静的句と動的句の間には大きな違いがあります。これは静的で、モデルの文脈で一度評価されます。 – mudasobwa
ロールはクラス変数か何ですか? –
ログインしたユーザーの属性としての役割を考慮する – srikant
非常に悪いパターンのようです。 CanCanのような宝石はどうですか? – Aleksey