Rails - Как создать модель, связанную с двумя другими моделями - PullRequest
11 голосов
/ 22 июня 2009

Я пытаюсь создать следующее:

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.

Ответы [ 2 ]

15 голосов
/ 22 июня 2009

Скорее всего, вам понадобятся две модели, структурированные следующим образом:

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 %>

(Этот образец взят из сообщения, сделанного Райаном Бейтсом около двух лет назад во время обсуждения на *1008* RailsForum .)


Просто примечание: сейчас оно довольно старое. Вы можете рассмотреть возможность оценки других стратегий для обработки этого в современном контексте Rails.

1 голос
/ 22 июня 2009

Вы можете создать модель соединения, которая связывает связь между двумя моделями пользователей

так в основном


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...