我是rails中活跃记录关联的新手,所以我不知道如何解决以下问题:
我有一个名为'meeting'和'users'的表。通过创建表'参与者'并设置以下关联语句,我已正确地将这两者联系在一起:
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
此时一切顺利,我可以通过在普通会议&gt; show.html.erb视图中调用@ meeting.users来访问参加特定会议参与者的用户值。
现在我想在这些参与者之间建立联系。因此,我创建了一个名为“connections”的模型,并创建了“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
请问,有没有人有解决方案/提示如何解决这个问题?
答案 0 :(得分:0)
我对您的问题的理解是,您希望在参加同一会议的用户之间建立联系。也许这会有用。
参与者模式
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
答案 1 :(得分:0)
我对模型中的关联如何工作有错误的理解。由于这种错误观点,我的问题开始时是错误的。
例如,我有一个模型会议会议,其中有许多来自模型参与者的参与者。我不知道我不仅可以检索会议参与者,而且还可以访问参与者与参与者一起分配的会议。
所以我只是简单地将表参与者的user_id和connected_user_id列更改为participant_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这样的东西来解决参与者模型。 有谁知道如何缩短这些嵌套资源?