Пользователь has_many: users,: through =>: friends - как? - PullRequest
1 голос
/ 08 марта 2010

Это мой код:

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 равен нулю.

Любая помощь?

С уважением, Йорн.

Ответы [ 3 ]

2 голосов
/ 09 марта 2010

Попробуйте: Railscasts - Самоссылочные ассоциации . Как правило, есть очень хорошие учебники по всем перечисленным темам.

1 голос
/ 08 марта 2010

Я думаю, вам нужно удалить пользователя own_to: в вашей модели Friend

1 голос
/ 08 марта 2010

Вам необходимо добавить атрибут :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>

Примечания:

  1. Rails автоматически сохраняет ассоциации. Вам нужно вызывать save, только если модель пользователя новая.
  2. Вам, вероятно, следует переименовать ассоциацию в нечто более явное. Например: friend_users и т. Д.
...