2013-04-22 2 views
0

У меня есть две модели: команда и пользователь.Rails inverse_of confusion

Каждый пользователь может иметь команду, и каждая команда имеет много пользователей. Но я хочу называть team.users командой team.members. Мне удалось сделать это с помощью class_name, но мне также нужен доступ к Team by User. Другими словами, user.team должен вернуть мне команду, в которой находится Пользователь. Вот что я придумал ...

Мои модели заключаются в следующем:

class Team < ActiveRecord::Base 
    has_many :members, foreign_key: 'id', class_name: 'User', :inverse_of => :team 
end 

class User < ActiveRecord::Base 
    belongs_to :team, :inverse_of => :user 
end 

(я попытался с: inverse_of =>:. Членов тоже внутри модели User)

ответ

1

Вы получил :inverse_of вправо, по крайней мере, когда вы используете :inverse_of => :members. Проблема здесь - это внешний ключ. foreign_key указывает имя ключевого столбца в другой таблице, поэтому в вашем случае в таблице пользователя. Если вы укажете только id, будет использоваться идентификатор пользователя. Просто оставьте его по умолчанию, не указав внешний ключ, а затем его team_id.

class Team < ActiveRecord::Base 
    has_many :members, :class_name => 'User', :inverse_of => :team 
end 

class User < ActiveRecord::Base 
    belongs_to :team, :inverse_of => :members 
end 

И стараются не смешивать хэш-синтаксис из рубина 1.8 (:key => 'value') с новым синтаксисом из рубина 1.9 (key: 'value').

+0

Спасибо, сейчас работает. :) – mzdravkov

Смежные вопросы