0

「多くの」ユーザーと「多くの」メーターを持つアカウント モデルがあります。Meter オブジェクトには account_id 列があるため、Cancancan でこの機能を簡単に定義できます。

if user
  can :crud, Meter, :account_id => user.account_id
end

ただし、メーターには「多くの」パラメーターもあります。パラメータがユーザーと同じアカウントに属するメーターに属している場合にのみ、CRUD アクセスを許可して、同様の機能定義を行いたいと考えています。

Parameter モデルには meter_id 列しかない (account_id 列ではない) ため、この追加レベルのネストを実現する最善の方法がわかりません。

編集

不明確で申し訳ありません。

私のモデルは次のとおりです。

Account > User (account_id) 
        > Meter (account_id) > Parameter (meter_id)

したがって、user.account_id = meter.account_id かどうかを確認できますが、パラメーターを確認する方法がわかりません。

編集 2

マットの答えと同様に、それは単純に次のものを含める場合です。

  load_and_authorize_resource :meter
  load_and_authorize_resource through: :meter

パラメータモデルで。

4

1 に答える 1

1
if user
  can :crud, Parameter, meter: { account_id: user.account_id }
end
于 2015-06-02T15:30:25.323 に答える