Пользователь has_many :users, :through => :friends - как?
-
18-09-2019 - |
Вопрос
Это мой код:
class Friend < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
end
class User < ActiveRecord::Base
#...
has_many :friends
has_many :users, :through => :friends
#...
end
Когда я сейчас начну добавлять пользователей с помощью...
user.users << user2
user.save
Заполняется только user_id друга, Friend_id имеет значение NULL.
Любая помощь?
Твой, ДЖЕРН.
Решение
Вам необходимо добавить :source
отнести к своему has_many through
ассоциация.
class User < ActiveRecord::Base
has_many :friends
has_many :users, :source => :friend, :through => :friends
end
Теперь следующие вызовы будут работать.
u1.users << u2
u.friends.last
# will print #<Friend id: 1, user_id: 1, friend_id: 4>
Примечания:
- Rails автоматически сохраняет ассоциации. Вам нужно позвонить
save
только если модель пользователя новая. - Вероятно, вам следует переименовать ассоциацию в нечто более явное.Например:
friend_users
и т. д.
Другие советы
Пытаться: Railscasts — самореферентные ассоциации.Как правило, имеет очень хорошие учебные пособия по всем перечисленным темам.
Я думаю, вам нужно удалить own_to :user в вашей модели Friend.
Не связан с StackOverflow