[英]How to create records in has_many through association in rails 3.2
我有兩個通過關聯具有多個has_many的模型(用戶和事件),其中當前的關聯通過以下邏輯進行:
模型:
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
在這里,記錄是使用user_id和event_like_id而不是`user_like_id&event_like_id創建的
但是我無法通過event.user_likes
獲取用戶記錄,因此我檢查了事件組記錄。 它具有nil value for user_like_id.
的nil value for user_like_id.
#<EventGroup id: 24, event_id: 1, user_id: 2,event_like_id: 1, user_like_id: nil>
讓我知道執行此操作的正確方法。
使用.where格式,您可以傳遞.where(“ event_groups.user_like_id =?”,17)之類的字符串來限定聯接的標記表。
例如:
User.joins(:event_groups).where("event_groups.user_like_id = ?", 17)
我不確定,但是您可能需要在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
在我看來,您正在嘗試對兩種多對多關系(用戶參與事件和用戶相似事件)進行建模,它們是一種關系中的不同概念。 我在這里假設用戶可以不喜歡就可以參加活動,反之亦然。 在這種情況下,將EventGroup
建模為僅表示參與關系,並創建另一個EventLikes
模型以表示Likes。 兩個表中的列將相同,但表示不同的關系。 之后,將事件添加到(事件或event_likes)中應該可以
我通過Relationship模型在相同模型(用戶-用戶)之間創建相似的關系,代碼如下:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.