Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails所属\u不使用自定义类名设置外键id_Ruby On Rails 3_Belongs To - Fatal编程技术网

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的存在是因为gem
composite\u primary\u键
覆盖了默认的rails
reflection.rb

我必须检查他们是如何实现
primary\u key\u name
derivate\u primary\u key\u name
方法的

在这个愚蠢的bug上浪费了相当多的时间,但至少我学到了很多关于ActiveRecord内部的知识

p.author = a