加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 04:38:08 所属栏目:百科 来源:网络整理
导读:我的模型设置如下: class User ActiveRecord::Base has_many :posts,:foreign_key = 'author_id'endclass Post ActiveRecord::Base belongs_to :author,:class_name = 'User'end 假设: p = Post.first # just any post instancea = User.first # any user
我的模型设置如下:
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内部的知识.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读