2013-01-24 61 views
0

我有两个型号,通过协会,在那里我目前协会是由以下逻辑多的has_many(用户和事件):如何通过协会创建的has_many记录在轨3.2

  1. 用户可以参加许多通过EventGroup
  2. 事件事件通过EventGroup拥有众多用户
  3. 用户可以通过Eventgroup像很多事件​​
  4. 事件有很多用户喜欢通过Eventgroup

型号:

class User 
has_many :event_groups 
has_many :events,:through => :event_groups 
has_many :event_likes,:through => :event_groups,:class_name => "Event" 
end 

class Event 
    has_many :event_groups 
    has_many :users,:through => :event_groups 
    has_many :user_likes,:through => :event_groups,:class_name => "User" 
end 

class EventGroup 
    belongs_to :user 
    belongs_to :event 
    belongs_to :user_like,:class_name => "User" 
    belongs_to :event_like,:class_name => "Event" 
end 

EventGroup列:

user_id 
event_id 
user_like_id 
event_like_id 

建立关联后我试图创建与下面的代码对应记录:

user = User.first 
user.event_likes << Event.first 
user.save 

enter image description here 这里记录与USER_ID & event_like_id创造,而不是`user_like_id & event_like_id

但我不能够通过event.user_likes来获得用户的记录,所以我检查了我的eventgroup记录。它有nil value for user_like_id.

#<EventGroup id: 24, event_id: 1, user_id: 2,event_like_id: 1, user_like_id: nil> 

让我知道正确的方法来做到这一点。

回答

0

使用.where格式,您可以传递字符串,如.where(“event_groups.user_like_id =?”,17)以限定加入的标记表。

例如:

User.joins(:event_groups).where("event_groups.user_like_id = ?", 17) 
+0

我不是要求步骤检索记录,我想知道如何正确添加记录。 – loganathan

+0

我回答了你的帖子“但我无法通过event.user_likes获取用户记录”。你使用'get',这是'get'查询,但不是'add'。 –

+0

问题是user_like_id是零总是,所以它不可能通过您的查询检索记录 – loganathan

0

我不知道,但你可能需要在has_many关系来定义inverse_of

class User 
#... 
has_many :event_likes, :through => :event_groups, :inverse_of => :user_likes, :class_name => "Event" 
end 

class Event 
    #... 
    has_many :user_likes, :through => :event_groups, :inverse_of => :event_likes, :class_name => "User" 
end 

查看:through in the doc of has_many

+0

没有运气inverse_of :( 虽然添加记录event_id更新而不是event_like_id – loganathan

0

看来章节对于我来说,你正在试图建立两个多对多的关系(用户参与事件和用户类事件),它们是o中不同的概念ne关系。我假设用户可以参与不喜欢它的活动,反之亦然。在这种情况下,请将EventGroup建模为仅表示参与关系,并创建另一个EventLikes模型来表示喜欢。两个表中的列将是相同的,但表示不同的关系。在此之后,添加事件或者(事件或event_likes)应该工作

0

我通过关系模型建立相同的模型(用户到用户)之间的相似关系, 我的代码:

has_many :relationships, foreign_key: "follower_id", dependent: :destroy

has_many :followed_users, through: :relationships, source: :followed

has_many :reverse_relationships, foreign_key: "followed_id", class_name: "Relationship", dependent: :destroy

has_many :followers, through: :reverse_relationships, source: :follower