如何在 Rails 中使用强参数方法存储随机嵌套变量?

How can I store random nested variables with strong params methods in Rails?

我有以下 class:

 class ArticlesController < ApplicationController
      def create
        article = Article.new(article_params) 
     
      end
      
      private
        def article_params
          params.permit(:name, :age, book: [])
        end  
    end

我有一个名为 book 的字段,它包含一个集合,后跟一个散列 [{...}],在散列对象中它可以包含任何随机属性,例如:

book_1 = 
    [
          {
            "id": "a1",
            "type": "Color",
            "title": "Live life cicle",
            "content": "image_intro.png"
           },
      ] 

book_2 =
      [
          {
            "id": "a2",
            "email": "example@gmail.com",
            "domain": "http://ddd.com"
           }
      ]
    ...

book_7
     [
          {
            "id": "a23",
            "width": "3px",
            "heigth": "5px",
            "exist": true
           }
      ]

我想要的是,每次我保存一本书时,它都可以通过article_params,无论它在散列中包含什么属性,如果你能帮助我,我将不胜感激。

ActionController::Parameters 没有允许任何嵌套散列键的“通配符”语法。但它确实有 #permit!,这表明强参数并不是解决所有可能问题的方法。

permit! 通过在 ActionController::Parameters 实例上设置 permitted 属性来完全规避白名单。

它还将在 ActionController::Parameters 的任何嵌套实例上设置允许的属性 - 即参数中的嵌套哈希值。

这是一个非常锋利的工具,应小心使用。

在这种情况下,您可能只想在嵌套属性上使用它:

params.permit(:name, :age).merge(
  books: params.dup.permit!.fetch(:books, [])
)