【问题标题】:Strong Parameters: Permit an array of symbols强参数:允许符号数组
【发布时间】:2017-03-09 03:30:30
【问题描述】:

我需要为我的 Rails 应用程序中的表单添加一长串参数列表。我制作了一组符号,每个符号都有我需要列入白名单的参数名称。有没有办法可以将此数组传递给 permit 方法并允许这些参数?表单不会将参数作为哈希传递。

form.rb

class Form < ApplicationRecord

  jsonb_accessor :fields,
                 salutation: :string, # personal info
                 first_name: :string,
                 last_name: :string,
                 birthday: :string,
                 marital_status: :string,
                 number_of_dependants: :string,
                 first_time_owner: :string,
                 spouse_deal: :string,
                 phone_cell: :string, # contact info
                ...

      def self.fields
        [:salutation, :first_name, :last_name,
         :birthday,
         :marital_status,
         :number_of_dependants,
         :first_time_owner,
         :spouse_deal,
         :phone_cell,
         :phone_home,
        ...
        ]
      end

end

forms_controller.rb

  def form_params
    params.require(:form).permit(:name, Form.fields)
  end

我正在使用 jsonb_accessor gem 将这些字段存储在 Form 表的 JSON 列中。所以我会有很多不同的形式,每个都有不同的参数。所以我需要找到一种动态允许参数的方法。我认为以上可能是一个好的解决方案。虽然我很感激有关更好解决方案的建议。

【问题讨论】:

  • params.require(:form).permit(:name, fields: [])?

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


【解决方案1】:

由于Form.fields 返回一个符号数组,您可以将其分解为单独的参数:

params.require(:form).permit(:name, *Form.fields)

【讨论】:

  • 谢谢,但出于某种原因,它只允许:birthday。不知道为什么。
  • 嗯,您想将 Form.fields 作为类方法调用,但您的代码显示您将其定义为实例方法(据我所知,这也会与定义的 fields 冲突jsonb_accessor,虽然我从未使用过那个宝石)。
  • 没关系,我的模型顶部有一个 attr_accessor,它覆盖了字段对象。再次感谢!
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多