Вопрос

Это мой код:

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>

Примечания:

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top