私はしばらくの間、この問題に悩まされてきました。私は次のようにモデル化されたグループメンバーシップを持っています:
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, :through => :memberships
end
class Membership < ActiveRecord::Base
attr_accessible :is_owner
belongs_to :user
belongs_to :group
end
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
has_many :locations
end
グループには、次のような多くの場所もあります。
class Location < ActiveRecord::Base
belongs_to :group
end
ユーザーが自分のグループに属する場所のみを表示できる機能を作成しようとしています (グループの所有権は、メンバーシップの is_owner フィールドを介して行われます)。これが私が試してきたことです:
can :read, Location, :group => { :memberships => { :user_id => user.id, :is_owner => true } }
これにより、次のエラーが表示されます。
SQLite3::SQLException: no such column: group.memberships
この能力を作成する方法はありますか?私はこの能力でたくさんのバリエーションを試しましたが、どれもうまくいきません. インデックス アクションを機能させたいため、ブロックを使用できません。回避策として、すべての場所をループして、使用している場所select!
を選択していcan :read
ます...明らかにこれは理想的ではありません。