首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建模收藏

建模收藏
EN

Stack Overflow用户
提问于 2011-11-23 02:40:23
回答 1查看 913关注 0票数 5

我希望将Favorite模型添加到我的UserLink模型中。

业务逻辑

  • 用户可以有多个链接(也就是说,他们可以添加多个链接)
  • 用户可以喜欢多个链接(属于他们自己的或其他用户)
  • 链接可以被多个用户喜欢,但是有一个所有者

我很困惑如何对这种关联进行建模,以及一旦模型就位后如何创建用户最喜欢的内容?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-23 02:52:54

下面的数据模型如何?

代码语言:javascript
复制
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属性从中间关联加载什么关联。

下面是一些使用该关联的伪代码:

代码语言:javascript
复制
# 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]
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8236701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档