我目前正在为我的API编写一些端点。
我目前遇到的一个问题是,当我发出POST请求时,我发送了一个在模型上实际上不存在的键,它显示在我的params
中,但有没有办法让它也显示在模型参数中?
示例
{
"comment": "Test",
"name": "Test",
"age": 50
}
当我调用params[model_name]
时,有没有办法让它包含comment
参数?
我试着把它添加到我允许的参数中,但是没有成功。我还把它作为attr_accessor
添加,它也不起作用。
1条答案
按热度按时间mfuanj7w1#
你在这里做了一个错误的假设,强参数API和模型之间有一个连接,而实际上并不存在这样的连接。
ActionController::Parameters
实际上只是一个类似哈希的对象,在它的袖子上有一些额外的技巧来切片和切割。唯一将两者联系起来的是约定,因为在Rails中,模型内部(数据库列)通常与端点的参数相同。
当您将
ActionController::Parameters
的示例传递给模型时,ActiveModel::AttributeAssignment
检查属性是否为permitted?
,然后循环键和值,并为输入中的每个键调用相应的setter方法。如果没有对应的方法,则会引发错误。
如果你希望能够分配数据库列不支持的属性,你所需要做的就是提供一个setter,这可以通过attributes API:
它的行为和其他属性一样,例如在序列化记录时会被包含在内。如果你不想/不需要它,就使用通过
attr_writer
定义的普通的老setter。