簡體   English   中英

如何通過Rails 3.2中的關聯在has_many中創建記錄

[英]How to create records in has_many through association in rails 3.2

我有兩個通過關聯具有多個has_many的模型(用戶和事件),其中當前的關聯通過以下邏輯進行:

  1. 用戶可以通過EventGroup參加許多活動
  2. 活動通過EventGroup有許多用戶
  3. 用戶可以通過事件組喜歡許多事件
  4. 活動通過活動組獲得了許多用戶的喜歡

模型:

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

參見has_many的文檔中的:through一章

在我看來,您正在嘗試對兩種多對多關系(用戶參與事件和用戶相似事件)進行建模,它們是一種關系中的不同概念。 我在這里假設用戶可以不喜歡就可以參加活動,反之亦然。 在這種情況下,將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM