2013-01-24 60 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