【问题标题】:Unpermitted parameters issue Ruby on Rails 5不允许的参数问题 Ruby on Rails 5
【发布时间】:2019-12-11 11:04:25
【问题描述】:

我目前正在尝试了解允许的参数在 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

但是里面的不同数组(例如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】:

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

它是如何工作的 - 你只允许需要的参数,你可以将它们视为一个哈希。未经允许的参数即使存在于 params 中也不会进入模型。这意味着当你打电话时

my_object.update_attributes(my_model_params)

它像

my_object.update_attributes(column1: value_for_column1_from_params)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2015-06-02
    • 2019-07-28
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多