Ruby on rails 在Rails中,如何在没有警告的情况下对现有模型对象进行体量指定?
在Rails应用程序中,可以将参数中的一些值指定给现有模型对象,如下所示:Ruby on rails 在Rails中,如何在没有警告的情况下对现有模型对象进行体量指定?,ruby-on-rails,strong-parameters,Ruby On Rails,Strong Parameters,在Rails应用程序中,可以将参数中的一些值指定给现有模型对象,如下所示: model.attributes = params model.attributes = params.permit(:a, :b, :c) 这显然会返回一个禁止属性错误,但可以这样避免: model.attributes = params model.attributes = params.permit(:a, :b, :c) 但是,尽管这样做有效,但如果params包含调用中未提及的密钥,则它仍会向控制台输出
model.attributes = params
model.attributes = params.permit(:a, :b, :c)
这显然会返回一个禁止属性错误,但可以这样避免:
model.attributes = params
model.attributes = params.permit(:a, :b, :c)
但是,尽管这样做有效,但如果params包含调用中未提及的密钥,则它仍会向控制台输出一条消息,以允许:
警告毫无意义,因为已经知道params包含其他键,并且正在使用permit选择所需的子集。这样做是可以避免的
model.attributes = params.slice(:a, :b, :c).permit!
有没有一种更合适的方法来执行此分配,而不需要首先对哈希进行切片
警告毫无意义,因为已经知道params包含其他键,并且正在使用permit选择所需的子集
你误解了这个警告的目的。当您调试为什么表单不更新您今天添加的这个新字段时,这是非常有价值的。有了警告,查看服务器日志,您会很快发现您忘记更新强参数筛选
此外,该警告仅在开发/测试环境中显示。它不会出现在生产中
但假设你真的讨厌这个警告。在这种情况下,您可以在应用程序配置中执行此操作:
# possible values: :raise, :log
config.action_controller.action_on_unpermitted_parameters = false
顺便说一句,你的代码有点不正统。常用的方法是将过滤代码保存在一个方法中,并从create/update和任何需要它的地方调用它
def update
@product = ...
if @product.update_attributes(product_params)
...
else
...
end
end
private
def product_params
params.require(:product).permit(:a, :b, :c)
end
谢谢你的回答;关于最后一部分,我不是在正常的控制器场景中这样做的。如果我这样做,我会完全按照你在回答中所说的去做。