Rails - Как создать модель, связанную с TWO другой модели
Я пытаюсь создать следующее:
User model (this is fine)
id
Link model (associated with two Users)
id
user_id1
user_id2
Является ли это экземпляром, в котором я хотел бы использовать тип ассоциации has_and_belongs_to_many в модели Link? Как мне это сделать?
В конечном счете, я хотел бы иметь объект пользователя и вызывать @user.links, чтобы получить все ссылки, связанные с этим пользователем...
Я просто не уверен, что лучший способ сделать это в Rails.
Ответы
Ответ 1
Вероятно, вам понадобятся две модели, структурированные следующим образом:
class User < ActiveRecord::Base
has_many :friendships
has_many :friends, :through => :friendships #...
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => 'User', :foreign_key => 'friend_id'
end
# ...and hence something like this in your view
<% for friendship in @user.friendships %>
<%= friendship.status %>
<%= friendship.friend.firstname %>
<% end %>
(Этот шаблон из сообщения, сделанного Райан Бейтс около двух лет назад во время это обсуждение на RailsForum.)
Просто примечание: теперь это довольно старо. Вы можете рассмотреть возможность оценки других стратегий для обработки этого в современном контексте Rails.
Ответ 2
Вы можете создать A Join Model, которая связывает связь между двумя моделями пользователей
поэтому в основном
class User
has_many :links, :through => :relationships
end
class Relationship
belongs_to :user_id_1, :class=> "User"
belongs_to :user_id_2, :class=> "User"
end