#ruby-on-rails #ruby #ruby-on-rails-3 #class #associations
#ruby-on-rails #ruby #ruby-on-rails-3 #класс #ассоциации
Вопрос:
Я использую Ruby on Rails 3 и пытаюсь использовать has_one :through
ассоциацию с использованием классов с пространством имен. Я прочитал официальное руководство по моделям объединения, но я не знаю, как этого добиться.
У меня есть User
, Relationship
и Group
классы, и я хотел бы связать Users
и Groups
через Relationship
класс. Кроме того, я хотел бы автоматически сохранять связанные записи и удалять записи отношений при удалении группы или пользователя.
Моя файловая система:
app/models/users/user.rb
app/models/users/relationship.rb
app/models/users/group.rb
В configs/routes.rb
У меня есть
namespace :users do
resources :users
resources :relationship
resources :groups
end
Инструкции класса (модели) являются:
class Users::User < ActiveRecord::Base
...
end
class Users::Relationship < ActiveRecord::Base
...
end
class Users::Group < ActiveRecord::Base
...
end
Как я должен писать ассоциации кода в файлах модели выше? У вас есть какие-нибудь советы по поводу?
Обновить
Мои классы (модели) имеют эти атрибуты:
Пользователь
ID
полное имя
…
Взаимосвязь
ID
user_id
group_id
Группа
ID
Имя
Комментарии:
1. Ваши таблицы выглядят нормально, они должны работать с этой настройкой.
Ответ №1:
Пространство имен вашего маршрута не имеет ничего общего с пространством имен вашей модели.
class Users::User < ActiveRecord::Base
has_many :relationships, :class_name=>"Users::Relationship", :dependent=>:destroy, :autosave=>true
has_many :groups, :class_name=>"Users::Group", :through=>:relationships
end
class Users::Relationship < ActiveRecord::Base
belongs_to :user, :class_name=>"Users::User"
belongs_to :group, :class_name=>"Users::Group"
end
class Users::Group < ActiveRecord::Base
has_many :relationsips, :class_name=>"Users::Relationship", :dependent=>:destroy, :autosave=>true
end