gpt4 book ai didi

ruby-on-rails - Rails has_many through 跨工作区忽略 class_name

转载 作者:行者123 更新时间:2023-12-04 17:06:38 26 4
gpt4 key购买 nike

我正在通过 2 个模型之间的关系使用一个简单的 has_many。

Achievement 模型通过 ConqueredAchievement 表描述了 Professional::Company 可以征服的成就,该表在它被征服时保存。

当我跨命名空间工作时,我知道在创建关系时我必须提供完整的类名,但它似乎没有任何影响,因为无论是否传递给 class_name 的值,它都会抛出完全相同的错误。

这是模型的代码:

class Achievement < ApplicationRecord
has_many :conquered_achievements
end

class Professional::Company < ApplicationRecord
has_many :conquered_achievements
has_many :achievements, through: :conquered_achievements
end

class ConqueredAchievement < ApplicationRecord
belongs_to :achievement
belongs_to :professional_company, class_name: 'Professional::Company'
end

当我尝试创建关联时,使用:
c.conquered_achievements.create!(achievement: a)

我收到错误(在 ConqueredAchievement 模型上有和没有 class_name 的错误相同):
ActiveModel::UnknownAttributeError (unknown attribute 'company_id' for ConqueredAchievement.)

在生成的表中,该行实际上被命名为professional_company_id。

我已经看到很多关于 has_many 的提示是因为跨命名空间不能正常工作。我做错了什么,还是这实际上是一个错误?

最佳答案

尝试:

class Professional::Company < ApplicationRecord
has_many :conquered_achievements, foreign_key: :professional_company_id
has_many :achievements, through: :conquered_achievements
end

线索在错误中:
ActiveModel::UnknownAttributeError (unknown attribute 'company_id' for ConqueredAchievement.)

该关联正在尝试使用名为 company_id 的属性。在 ConqueredAchievement找到 Professional::Company .但是,正如您所说,该属性不存在。

您可以使用 foreign_key: 来规定外键,而不是让 rails 尝试推断外键。选项如 docs 中所述,第 4.3.2.6 节。

关于ruby-on-rails - Rails has_many through 跨工作区忽略 class_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272376/

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