‘has_one: сквозная’ ассоциация с использованием классов с пространством имен

#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