Rails has_many 通过跨工作区忽略 class_name
Rails has_many through across workspaces ignores class_name
我正在处理一个简单的 has_many 通过 2 个模型之间的关系。
Achievement 模型描述了一个 Professional::Company 可以通过 ConqueredAchievement table 征服的成就,该成就在被征服时保持不变。
当我跨命名空间工作时,我知道在创建关系时我必须提供完整的 class 名称,但它似乎没有任何效果,因为它抛出完全相同的错误或者没有传递给 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.)
在生成的 table 上,该行实际命名为 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.)
协会正在尝试使用 ConqueredAchievement
上名为 company_id
的属性来查找 Professional::Company
。但是,正如您所说,该属性不存在。
而不是让 rails 尝试推断外键,您可以使用 foreign_key:
选项规定外键,如 docs,第 4.3.2.6 节所述。
我正在处理一个简单的 has_many 通过 2 个模型之间的关系。
Achievement 模型描述了一个 Professional::Company 可以通过 ConqueredAchievement table 征服的成就,该成就在被征服时保持不变。
当我跨命名空间工作时,我知道在创建关系时我必须提供完整的 class 名称,但它似乎没有任何效果,因为它抛出完全相同的错误或者没有传递给 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.)
在生成的 table 上,该行实际命名为 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.)
协会正在尝试使用 ConqueredAchievement
上名为 company_id
的属性来查找 Professional::Company
。但是,正如您所说,该属性不存在。
而不是让 rails 尝试推断外键,您可以使用 foreign_key:
选项规定外键,如 docs,第 4.3.2.6 节所述。