不允许的参数发布Ruby on Rails 5

问题描述 投票:0回答:1

我目前正在尝试了解允许的参数如何在ruby中工作。

通常,在my_model.rb中,我有:

has_many: some_other_model 
*
*
*
def my_model_params
  params.require(:my_model).permit( :column1, some_other_model_attributes %i[other_column1])
  etc...

和更新功能中的

my_object.update_attributes(my_model_params)

带有格式正确的json,它具有一些my_model根,并且some_other_model_attributes作为具有值的子级(数组)。

我的问题是我收到这样的json

enter image description here

但是内部的不同数组(例如codificationgeneral_information)确实包含任务的属性(general_information包含reference,它是任务表中的一列),但是没有任何名为codification或与codification_attributes的关系的列。

所以,当我添加:general_information: %i[reference]在允许的参数中,显示为unknown attribute 'general_information' for Mission

如果没有,则不会引发任何错误,但是在日志中我可以看到unpermitted_parameter: general_information。而且我的对象没有更新。

最后,如果我拒绝它,则日志中不再有unpermitted_parameter: general_information,但我的对象也未更新。

[我试图在我的开发配置中将config.action_controller.action_on_unpermitted_parameters设置为false,但它什么也没做,而且对于生产环境来说可能是个坏主意。

[.permit!的使用(即使可以使用)目前不是一种选择。即使我认为json需要重新格式化,还是最好找到其他解决方案。

感谢您的帮助。

ruby-on-rails ruby-on-rails-5 actioncontroller
1个回答
0
投票

unpermitted_parameter: ...登录不是您需要解决的问题,它只是一个信息。

它是如何工作的-您只允许所需的参数,您可以将它们视为哈希。即使参数中存在不允许的参数,它们也不会进入模型。这意味着当您致电

my_object.update_attributes(my_model_params)

它的作用类似于

my_object.update_attributes(column1: value_for_column1_from_params)

参数中的键应与模型中的列完全一样命名,否则您需要在创建/更新之前以某种方式准备参数

© www.soinside.com 2019 - 2024. All rights reserved.