gpt4 book ai didi

ruby-on-rails-3 - Railslongate_to不会使用自定义类名设置外键ID

转载 作者:行者123 更新时间:2023-12-04 07:14:25 24 4
gpt4 key购买 nike

我的模型设置如下:

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。但是,这没有发生。

我尝试使用没有 belongs_to参数的 class_name模型,并且一切正常。

现在,使它变得怪异的另一件事是,当我将关联更改为 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'时,它出奇地起作用了。

这是Rails 3.0.9中的错误吗?外键参数不是不必要的,因为如文档所述,其默认值是附加了 _id的关联的名称。

还要注意,即使没有 :foreign_key => 'author_id',有关该关联的其他所有内容也都可以正常工作。 (就像获取关联的模型一样)唯一不起作用的是setter方法,未设置外键。

我知道我可以只使用 p.author_id = a.id或将 :foreign_key参数添加到所有与 class_name的关联中,但是我更喜欢 p.author = a的语法更优雅

最佳答案

在阅读了很多Rails代码并进行跟踪之后,这就是我发现的内容:

存在此错误是因为gem composite_primary_keys覆盖了默认的rails reflection.rb

我将不得不检查它们如何实现primary_key_namederive_primary_key_name方法。

在这个愚蠢的错误上浪费了很多时间,但至少我对ActiveRecord的内部知识了解很多。

关于ruby-on-rails-3 - Railslongate_to不会使用自定义类名设置外键ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6635579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com