Rails: UnknownAttribute Error - 如何让我的模型 "know" 属性在 Rails6 中排在首位?
Rails: UnknownAttribute Error - How do I make my model "know" attributes in the first place in Rails6?
在 Rails6 中,我认为有评论提到我只能使用迁移来为模型分配属性。 (即我的模型迁移中的列 table 自动分配给该模型)
对吗?
和错误消息
ActiveModel::UnknownAttributeError
生成是因为例如某些视图在表单中使用了未知属性?也就是:一个,通过迁移没有列?
I can only use migrations to assign attributes to a model.
从技术上讲,没有。但实际上 - 是的。在启动时 Rails 加载它所连接的任何数据库的模式并为您的模型生成属性。您可以打开一个 psql
控制台(或您选择的数据库的等效控制台),手动添加一列,然后该属性将在下一次模式刷新时出现在您的模型中。但你不应该那样做。您的所有架构更改都应该在迁移中。
And the Error Message ActiveModel::UnknownAttributeError
is spawned because for instance some view uses an unknown attribute in a form ?
是的。
That is: one, which has no column through a migration ?
没有。您可以定义瞬态属性(那些不会持久化因此不需要数据库列和迁移的属性)。
class User < ApplicationRecord
attribute :skip_extended_validation # this attribute is not persisted, but can be set from forms, etc.
end
对于问题的最后一部分,此特定错误 (UnknownAttributeError) 在 mass assignment 期间发生在未知属性上。
如果您直接在实例上调用它,错误会有所不同(我相信是 NoMethodError),因为 Rails 无法知道您是尝试访问属性还是方法。
在 Rails6 中,我认为有评论提到我只能使用迁移来为模型分配属性。 (即我的模型迁移中的列 table 自动分配给该模型)
对吗?
和错误消息
ActiveModel::UnknownAttributeError
生成是因为例如某些视图在表单中使用了未知属性?也就是:一个,通过迁移没有列?
I can only use migrations to assign attributes to a model.
从技术上讲,没有。但实际上 - 是的。在启动时 Rails 加载它所连接的任何数据库的模式并为您的模型生成属性。您可以打开一个 psql
控制台(或您选择的数据库的等效控制台),手动添加一列,然后该属性将在下一次模式刷新时出现在您的模型中。但你不应该那样做。您的所有架构更改都应该在迁移中。
And the Error Message
ActiveModel::UnknownAttributeError
is spawned because for instance some view uses an unknown attribute in a form ?
是的。
That is: one, which has no column through a migration ?
没有。您可以定义瞬态属性(那些不会持久化因此不需要数据库列和迁移的属性)。
class User < ApplicationRecord
attribute :skip_extended_validation # this attribute is not persisted, but can be set from forms, etc.
end
对于问题的最后一部分,此特定错误 (UnknownAttributeError) 在 mass assignment 期间发生在未知属性上。
如果您直接在实例上调用它,错误会有所不同(我相信是 NoMethodError),因为 Rails 无法知道您是尝试访问属性还是方法。