ruby-on-rails-3 – Rails belongs_to不会使用自定义类名设置外键id

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – Rails belongs_to不会使用自定义类名设置外键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 = 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的更优雅的语法

解决方法

阅读了很多Rails代码并跟踪我发现的内容

由于gem composite_primary_keys超出了默认的rails reflection.rb,因此存在此错误.

我将不得不检查他们如何实现primary_key_name和derive_primary_key_name方法.

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

原文链接:https://www.f2er.com/ruby/269606.html

猜你在找的Ruby相关文章