在我的网络开发人员类中,我们得到了以下代码:
class User < ActiveRecord::Base
has_many :shouts
has_many :followed_user_relationships, class_name: "FollowingRelationship"
has_many :followed_users, through: :followed_user_relationships
def follow(other_user)
followed_users << other_user
end
end
我了解所有的内容,但class_name除外。它是否以某种方式将信息添加到模型关系中,还是只是使该关系成为该类名称的别名?我检查了文档,对于刚接触Rails的人来说似乎一文不值。
Rails需要知道要为关联实例化的类。它通过根据关联名称进行猜测来做到这一点,但是只有在您的类和关联被可预测地命名时,它才能做到这一点。具体来说,它用于String#classify
将关联名称转换为类名称。classify
从下划线大小写转换为驼峰大小写,并将单词单数化:
"some_kind_of_records".classify => "SomeKindOfRecord"
在您的特定情况下,您的关联名称和类名称不是通过这种方式关联的。:followed_user_relationships
会导致Rails查找名为的类FollowedUserRelationship
,而不是正确的类FollowingRelationship
。
因为您已经稍微偏离了该约定,所以您必须显式地告诉Rails所涉及的类的名称。就是class_name
这样。当Rails无法正确猜测时,它会告诉Rails要使用的类的名称。
考虑一个更简单的示例:
class User < ActiveRecord::Base
end
class Post < ActiveRecord::Base
belongs_to :author, class_name: 'User'
end
如果我们写的只是,Rails怎么会知道aPost
与a相关联?User
belongs_to :author
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句