【问题标题】:Permitting array of hashes rails 5允许哈希数组 rails 5
【发布时间】:2018-12-20 15:36:53
【问题描述】:

我的 rails 版本是 5,我有这样的请求参数,

{ "segment": {
    "name": "test",
    "new_filters": [
      {"criteria": "sad",
        "other_keys": [{"key": "value"}]
      }, 
      {"criteria": "sad",
        "other_keys1": [{"key1": "value1"}]
      }]
}
}

我坚持允许在 rails 控制器中使用 new_filter 参数, 我正在尝试下面的代码,

params.require(:segment).permit(:name, :people_count, new_filters: [])

并且仍然得到错误。但是,在 new_filter 键中有字符串数组时,情况并非如此。 例如:[“悲伤”,“asdasd”]。如何将嵌套结构作为白名单属性?

【问题讨论】:

  • 试试.permit(..., new_filters: [:criteria, other_keys: [:key1])。你的第二个new_filterother_keys1,这会改变吗?你期待那里有什么价值吗?还是你总是知道那里会出现什么键?。
  • 你在用这些参数做什么?您是否使用它们进行批量分配?还是别的什么?
  • permit 也可以处理嵌套,但我们需要了解@jvillian 提到的你在做什么
  • @fanta,这似乎有效,但它显示了内部键的未经许可的参数。键只是预期的键,但在我的情况下嵌套级别太深了。
  • 您应该允许所有这些,将它们添加到您的许可结构中,否则它们不会通过。这比permit! 最好,permit! 是危险的,因为它会允许用户发送的所有内容。

标签: ruby-on-rails ruby-on-rails-5 strong-parameters


【解决方案1】:

在使用您的属性进行测试时,这对我有用:

params.require(:segment).permit(:name, :people_count, new_filters: [:criteria, other_keys: [:key], other_keys1: [:key1]])

【讨论】:

    【解决方案2】:

    在您的段模型文件中尝试添加该行

    accepts_nested_attributes_for :new_filters
    

    这应该允许您传递这些属性。

    https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2016-06-10
      • 2016-10-25
      • 2017-08-08
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      相关资源
      最近更新 更多