我目前正在尝试了解允许的参数如何在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
但是内部的不同数组(例如codification,general_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需要重新格式化,还是最好找到其他解决方案。
感谢您的帮助。
unpermitted_parameter: ...
登录不是您需要解决的问题,它只是一个信息。
它是如何工作的-您只允许所需的参数,您可以将它们视为哈希。即使参数中存在不允许的参数,它们也不会进入模型。这意味着当您致电
my_object.update_attributes(my_model_params)
它的作用类似于
my_object.update_attributes(column1: value_for_column1_from_params)
参数中的键应与模型中的列完全一样命名,否则您需要在创建/更新之前以某种方式准备参数