Я создаю среду авторизации, которая в конечном итоге будет использовать cancan на уровне кода.Я создаю модель и ассоциации, и у меня все почти идеально, но я наткнулся на загадку.
У меня есть Пользователь, Роли и Права с множеством таблиц соединения (user_roles и role_rights), и у меня все настроено такчто вы можете сделать User.roles и User.roles.first.rights, но я хотел бы иметь возможность сделать User.rights
class User < ActiveRecord::Base
has_many :user_roles
has_many :roles, :through => :user_roles
end
class UserRole < ActiveRecord::Base
belongs_to :user
belongs_to :role
end
class Role < ActiveRecord::Base
has_many :user_roles
has_many :users, :through => :users_roles
has_many :role_rights
has_many :rights, :through => :role_rights
end
class RoleRight < ActiveRecord::Base
belongs_to :role
belongs_to :right
end
class Right < ActiveRecord::Base
has_many :role_rights
has_many :roles, :through => :role_rights
end
Следующие работы:
User.roles
такделает это:
User.roles.first.rights
, но я хочу сделать следующее:
User.rights
, но когда я пытаюсь, я получаю следующее сообщение об ошибке: NoMethodError: неопределенный метод `rights '
Я предполагаю, что мне нужно что-то добавить в модель User, чтобы сделать ее поперечной к модели Right, но я не могу выяснить ассоциации.
Я использую Rails 2.3.4 и Ruby 1.80,7