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

bvn4nwqk  于 2023-10-21  发布在  Ruby
关注(0)|答案(2)|浏览(124)

我在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似乎解释了错误的命名。这能有什么问题

hmmo2u0o

hmmo2u0o1#

我也有同样的问题,但我的解决方案不同。
我的belongs_to模型中有一个错字,导致模型无效。
我发现这是一个无效的模型,试图在控制台中访问它。因为它是无效的,Rails没有加载它,因此找不到它。
当我更正错字时,错误消失了。

xzlaal3s

xzlaal3s2#

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),或者定义自己的变形

相关问题