Rails 找不到有效的模型 - 但关联存在

问题描述 投票:0回答:2

我在 Rails 中有一个多态表

MetaFieldsData
,它也属于表
MetaFields

class MetaFieldsData < ApplicationRecord
  belongs_to :owner, polymorphic: true
  belongs_to :meta_field
end
class MetaField < ApplicationRecord
  belongs_to :organization
  has_many :meta_fields_data
end

连接到多态表的一个模型称为

orders
:

class Order < ApplicationRecord
  belongs_to :organization
  ...
  has_many :meta_fields_data, as: :owner

  ...

owner
是我的协会课程(与官方
RoR指南
中的imageable相同) 现在,当我想在
Order
模型上创建记录时,我看到了一个奇怪的行为:

MetaFieldsData.create(owner: order, meta_field: some_meta_field)

它抛出:

NameError Exception: Rails couldn't find a valid model for MetaFieldsDatum association.
Please provide the :class_name option on the association declaration. If :class_name is already provided, make sure it's an ActiveRecord::Base subclass.

奇怪的是没有类

MetaFieldsDatum
(注意这里的拼写错误,来自Rails)。我搜索了所有代码,其中没有拼写错误,类名定义中也没有。

这使得我无法在此表上创建实际的

MetaFieldsData
,因为 Rails 似乎解释了错误的命名。 这里可能出了什么问题?

ruby-on-rails activerecord
2个回答
4
投票

我遇到了同样的问题,但我的解决方案不同。

我的

belongs_to
模型中有一个拼写错误,导致模型无效。

我尝试在控制台中访问它,发现它是一个无效模型。因为它无效,Rails 没有加载它,随后也找不到它。

当我更正拼写错误后,错误消失了。


1
投票

Datum
用作
data
的复数形式。请注意,您有
has_many :meta_fields_data
,如果您想将其更改为单数,它也将是
has_one :meta_fields_data
。 这称为词形变化,它是一种检测单词复数形式的方法,您可以在此处阅读 Rails 的做法 https://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html

一般来说,您可以简单地遵循错误告诉您的内容并在关系名称中使用

datum
(如果这样做,请指定 class_name),或者定义您自己的变形

© www.soinside.com 2019 - 2024. All rights reserved.