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 无法知道您是尝试访问属性还是方法。