Ассоциация has_one: through с использованием классов имен - PullRequest
2 голосов
/ 03 мая 2011

Я использую Ruby on Rails 3 и пытаюсь использовать ассоциацию has_one :through, используя классы пространства имен.Я прочитал официальное руководство о моделях ассоциаций, но я не знаю, как этого добиться.

У меня есть User, Relationship и Group классы и Iхотел бы связать Users и Groups через Relationship class .Кроме того, я хотел бы автоматически сохранять связанные записи и удалять записи отношений при удалении группы или пользователя.

Моя файловая система:

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

full_name

...

Отношения

id

user_id

group_id

Группа

id

имя

1 Ответ

4 голосов
/ 03 мая 2011

Пространство имен вашего маршрута не имеет ничего общего с пространством имен вашей модели.

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
...