Ruby on rails 3 Rails所属\u不使用自定义类名设置外键id
我的模型设置如下:Ruby on rails 3 Rails所属\u不使用自定义类名设置外键id,ruby-on-rails-3,belongs-to,Ruby On Rails 3,Belongs To,我的模型设置如下: class User < ActiveRecord::Base has_many :posts, :foreign_key => 'author_id' end class Post < ActiveRecord::Base belongs_to :author, :class_name => 'User' end 现在这段代码的行为非常奇怪 p.author = a 设置作者后,文章的属性author\u id应设置为用户的id。但这并
class User < ActiveRecord::Base
has_many :posts, :foreign_key => 'author_id'
end
class Post < ActiveRecord::Base
belongs_to :author, :class_name => 'User'
end
现在这段代码的行为非常奇怪
p.author = a
设置作者后,文章的属性author\u id
应设置为用户的id。但这并没有发生
我尝试使用带有属于
的模型,该模型没有class\u name
参数,并且一切正常
现在,更奇怪的是,当我将关联更改为归属于:author,:class\u name=>'User',:foreign\u key=>'author\u id'
时,它出人意料地工作了
这是Rails 3.0.9中的一个bug吗?外键参数不应该是不必要的,因为正如文档所说,它的默认值是附加了\u id
的关联的名称
还要注意的是,即使没有:foreign\u key=>“author\u id”
,与该关联相关的所有其他内容也会按预期工作。(就像获取关联的模型)唯一不起作用的是setter方法没有设置外键
我知道我可以只做
p.author\u id=a.id
,或者只添加:foreign\u key
参数到我与类名
的所有关联中,但我更喜欢p.author=a
的更优雅的语法,在阅读了大量Rails代码和跟踪之后,我发现了以下内容:
这个bug的存在是因为gemcomposite\u primary\u键
覆盖了默认的railsreflection.rb
我必须检查他们是如何实现primary\u key\u name
和derivate\u primary\u key\u name
方法的
在这个愚蠢的bug上浪费了相当多的时间,但至少我学到了很多关于ActiveRecord内部的知识
p.author = a