私はレール 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
}
そして、次のように使用します。
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 による回答、特にデフォルト スコープの使用に関する部分をお読みください。