0

私はレール 3.2.21 を使用しています。ルビーのバージョンは 2.0 です。

私の要件は、特定のモデルのロール ベースの条件付きデフォルト スコープを持つことです。例えば

ロール変数をログイン ユーザーの属性と見なす

if role == 'xyz'
  default_scope where(is_active: false)
elsif role == 'abc'
   default_scope where(is_active: true)
end
4

2 に答える 2

2

プログラミングに不可能はありません。

一般に、使用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 - マジで?...

于 2016-09-07T07:02:25.317 に答える
1
default_scope where(
  case role
  when 'xyz' then { is_active: false }
  when 'abc' then { is_active: true }
  else '1 = 1'
  end
)

また、Andrey Deineko による回答、特にデフォルト スコープの使用に関する部分をお読みください。

于 2016-09-07T07:13:25.923 に答える