Проблема ассоциации модели Rails - PullRequest
0 голосов
/ 23 декабря 2010

Я новичок в активном объединении записей в рельсах, поэтому я не знаю, как решить следующую проблему:

У меня есть таблицы, называемые "встречи" и "пользователи".Я правильно связал их вместе, составив таблицу «участники» и установив следующие операторы связи:

class Meeting < ActiveRecord::Base
    has_many :participants, :dependent => :destroy
    has_many :users, :through => :participants

и

class Participant < ActiveRecord::Base
    belongs_to :meeting
    belongs_to :user

и последняя модель

class User < ActiveRecord::Base
    has_many :participants, :dependent => :destroy

На данный момент все идет хорошо, и я могу получить доступ к пользовательским значениям присутствующих участников определенного собрания, позвонив по адресу @ meeting.users в обычном представлении Meeting> show.html.erb.хочу установить связь между этими участниками.Поэтому я создал модель под названием «соединения» и создал столбцы «meeting_id», «user_id» и «connected_user_id».Таким образом, эти связи похожи на дружбу в рамках определенной встречи.

Мой вопрос: как я могу установить ассоциации моделей, чтобы я мог легко контролировать эти соединения?

Я хотел бы найти решение, где я мог бы использовать

@meeting.users.each do |user|
    user.connections.each do |c|
        <do something>
    end
end

Я попробовал это, изменив модель собраний на это:

class Meeting < ActiveRecord::Base
    has_many :participants, :dependent => :destroy
    has_many :users, :through => :participants
    has_many :connections, :dependent => :destroy
    has_many :participating_user_connections, :through => :connections, :source => :user

Пожалуйста, у кого-нибудь есть решение / совет, как решить эту проблему путями?

Ответы [ 2 ]

0 голосов
/ 24 декабря 2010

Я неправильно понял, как работают ассоциации в Моделях.Из-за этого неправильного взгляда мой вопрос был неправильным для начала.

Например, у меня есть модельные встречи. Встречи, в которых участвует много участников из модельных участников.Я не знал, что я не могу только получить информацию о собранииучастника таблицы для member_id и connected_participant_id.Затем в моделях я сделал.

Участник модели:

class Participant < ActiveRecord::Base
    belongs_to :meeting
    belongs_to :user
    belongs_to :participating_user, :class_name => 'User', :foreign_key =>'user_id'
    has_many :connections 

Подключение модели:

class Connection < ActiveRecord::Base
    belongs_to :participant, :foreign_key => 'connected_participant_id'

С этими ассоциациями я мог просто получить доступ к соединениям соответствующего участникав представлении с использованием:

Представление (код haml)

- @meeting.participants.each do |p|
    %p
        %b Participant:
        = "#{p.user.first_name} #{p.user.last_name}"
    - p.connections.each do |c|
        %p
        %b Participant:
        = "#{c.participant.user.first_name} #{c.participant.user.last_name}"

И последнее, эти вложенные ресурсы c.participant.user.firstname очень длинные.Я предпочитаю видеть что-то вроде p.connected_participants, которое будет касаться модели участников.Кто-нибудь знает, как сократить эти вложенные ресурсы?

0 голосов
/ 23 декабря 2010

Мое понимание вашей проблемы заключается в том, что вы хотите установить связь между пользователями, которые посетили одно и то же собрание. Возможно, это сработает.

В модели участника

 has_many => :connections
 has_many => :users, :through => :connections

ВМодель пользователя

has_many => :connections

Тогда, я полагаю, вы можете сделать:

@meeting.users.each do |user|
    user.connections.each do |c|
        #access each user object through the object |c|
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...