如何以下数据模型:
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]
我需要创建'Favorite_Link'和'Favorited'模式? – Dru
否; 'has_many:through'与'class_name'选项结合在一起表明Rails应该查看给定的关联关系,以便在那里找到另一个关联关系,实质上是跳过两个模型来获取正确的对象。 –
DISREGARD [上面解释]:谢谢,我无法理解我们如何引用:favourites和:favorite_links模型中没有作为模型本身存在的模型。这种技术有没有名字?我想了解它是如何工作的。 – Dru