我的模型设置如下:
class User < ActiveRecord::Base has_many :posts,:foreign_key => 'author_id' end class Post < ActiveRecord::Base belongs_to :author,:class_name => 'User' end
假设:
p = Post.first # just any post instance a = User.first # any user instance
现在这段代码表现得非常奇怪
p.author = a
设置作者后,帖子的属性author_id应设置为用户的id.但这不会发生.
我尝试使用不具有class_name参数的belongs_to模型,一切都按预期工作.
现在,让我更奇怪的是,当我将关联更改为belongs_to:author时,:class_name => ‘用户’,:foreign_key => ‘author_id’,令人惊讶的是有效.
这是Rails 3.0.9中的错误吗?外键参数不应该是不必要的,因为正如文档所说,它的默认值是附加了_id的关联的名称.
另请注意,即使没有:foreign_key => ‘author_id’,关于该关联的其他一切按预期工作. (就像获取相关模型一样)唯一不起作用的是setter方法没有设置外键.
我知道我可以做p.author_id = a.id或者只是添加:foreign_key params到我与class_name的所有关联,但我更喜欢p.author = a的更优雅的语法