簡體   English   中英

建模收藏夾

[英]Modeling Favorites

我想在我的UserLink模型中添加一個Favorite模型。

商業邏輯

  • 用戶可以擁有多個鏈接(也就是說,他們可以添加多個鏈接)
  • 用戶可以喜歡多個鏈接(自己或其他用戶)
  • 鏈接可以被多個用戶收藏,但擁有一個所有者

我對如何建模這種關聯感到困惑,一旦模型到位,我將如何創建用戶喜好?

class User < ActiveRecord::Base
  has_many :links
  has_many :favorites
end

class Link < ActiveRecord::Base
  belongs_to :user
  #can be favorited by multiple users 
end

class Favorite < ActiveRecord::Base
  belongs_to :user
  belongs_to :link 
end

以下數據模型如何:

class User < ActiveRecord::Base
  has_many :links
  has_many :favorites, :dependent => :destroy
  has_many :favorite_links, :through => :favorites, :source => :link
end

class Link < ActiveRecord::Base
  belongs_to :user
  has_many   :favorites, :dependent => :destroy
  has_many   :favorited, :through => :favorites, :source => :user
end

class Favorite < ActiveRecord::Base
  belongs_to :user
  belongs_to :link
end

由於User已經有一個名為links的關聯,而Link已經有一個名為users ,因此我們不能對has_many :through關聯使用相同的名稱(例如, User has_many :links, :through => :favorites不起作用)。 因此,我們發明了一個新的關聯名稱,並幫助Rails知道通過source屬性從中間關聯加載的關聯。

這是使用此關聯的一些偽代碼:

# Some users
user1 = User.create :name => "User1"
user2 = User.create :name => "User2"

# They create some links
link1_1 = user1.links.create :url => "http://link1_1"
link1_2 = user1.links.create :url => "http://link1_2"
link2_1 = user2.links.create :url => "http://link2_1"
link2_2 = user2.links.create :url => "http://link2_2"

# User1 favorites User2's first link
user1.favorites.create :link => link2_1
# User2 favorites both of User1's links
user2.favorites.create :link => link1_1
user2.favorites.create :link => link1_2

user1.links          => [link1_1, link1_2]
user1.favorite_links => [link2_1]
user2.links          => [link2_1, link2_2]
user2.favorite_links => [link1_1, link1_2]
link1_1.favorited    => [user2]

link2_1.destroy

user1.favorite_links => []
user2.links          => [link2_2]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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