您好我无法概念化何时使用:source
以及何时使用:class
来处理更复杂的模型。
这里我有一个有朋友的用户示例。
class User < ActiveRecord::Base
...
has_many :friendships, :dependent => :destroy
has_many :friends, :through => :friendships, :conditions => "status = 'accepted'"
has_many :requested_friends, :through => :friendships, :source => :friend, :conditions => "status = 'requested'", :order => :created_at
has_many :pending_friends, :through => :friendships, :source => :friend, :conditions => "status = 'pending'", :order => :created_at
end
class Friendship < ActiveRecord::Base
attr_accessible :friend_id, :user_id, :status
belongs_to :user
belongs_to :friend, :class_name => "User", :foreign_key => 'friend_id'
end
有人可以解释为什么友谊是:class_name
而不是:source
?这是因为那只是配对(has_many +:source,belongs_to +:class_name)?
答案 0 :(得分:24)
它们在概念上是相同的,只是需要针对不同的用途而不同。
当您使用:source
时,使用 has_many through
(可选)定义关联的模型名称; :class_name
使用(可选)简单的has many
关系。只有当Rails无法自己找出类名时才需要这两者。请参阅documentation for has_many in the API here。
答案 1 :(得分:0)
以下是使用的示例:source和:class_name。
has_many :subscribers, through: :subscriptions, source: :user
has_many :people, class_name: "Person"
正如您在使用直通表时所看到的那样,您最终使用source
,否则您使用class_name
。
查看此链接中的选项示例: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many