ruby-on-rails 有没有办法让非列键存在于强参数中?

4szc88ey  于 2023-03-20  发布在  Ruby
关注(0)|答案(1)|浏览(125)

我目前正在为我的API编写一些端点。
我目前遇到的一个问题是,当我发出POST请求时,我发送了一个在模型上实际上不存在的键,它显示在我的params中,但有没有办法让它也显示在模型参数中?
示例

{
    "comment": "Test",
    "name": "Test",
    "age": 50
}

当我调用params[model_name]时,有没有办法让它包含comment参数?
我试着把它添加到我允许的参数中,但是没有成功。我还把它作为attr_accessor添加,它也不起作用。

mfuanj7w

mfuanj7w1#

你在这里做了一个错误的假设,强参数API和模型之间有一个连接,而实际上并不存在这样的连接。ActionController::Parameters实际上只是一个类似哈希的对象,在它的袖子上有一些额外的技巧来切片和切割。
唯一将两者联系起来的是约定,因为在Rails中,模型内部(数据库列)通常与端点的参数相同。
当您将ActionController::Parameters的示例传递给模型时,ActiveModel::AttributeAssignment检查属性是否为permitted?,然后循环键和值,并为输入中的每个键调用相应的setter方法。
如果没有对应的方法,则会引发错误。
如果你希望能够分配数据库列不支持的属性,你所需要做的就是提供一个setter,这可以通过attributes API

class Foo < ApplicationRecord
  attribute :bar, :integer
end

它的行为和其他属性一样,例如在序列化记录时会被包含在内。如果你不想/不需要它,就使用通过attr_writer定义的普通的老setter。

相关问题