我在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似乎解释了错误的命名。这能有什么问题
2条答案
按热度按时间hmmo2u0o1#
我也有同样的问题,但我的解决方案不同。
我的
belongs_to
模型中有一个错字,导致模型无效。我发现这是一个无效的模型,试图在控制台中访问它。因为它是无效的,Rails没有加载它,因此找不到它。
当我更正错字时,错误消失了。
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),或者定义自己的变形