如何使用关注文件向我的控制器添加强参数?

How can I add strong parameters to my controller using a concern file?

如何使用关注文件向我的控制器添加强参数

假设我有多个控制器使用的 :name, :age, :sex 参数,我的想法是创建一个关注模块,我在其中存储这些 common_params 并将它们添加到允许的参数中模糊地尝试在下面做。

控制器

class PersonController < ApplicationController
  include CommonHelper

  def update
    @person.create(person_params)
  end

  private 

    def person_params
      params.require(:person).permit(:foo, :bar, common_params)
    end
end

关注

module CommonHelper
  extend ActiveSupport::Concern

  def common_params
    { :name, :age, :sex }
  end
end

理想情况下,我应该得到与我正在做的相同的结果:permit(:foo, :bar, :name, :age, :sex)

关注

module CommonHelper
  COMMON_PARAMS = %i[ name age sex ].freeze
end

控制器

def person_params
  params
    .require(:person)
    .permit([:foo, :bar] | CommonHelper::COMMON_PARAMS)
end

您可以使用 * 运算符,它将数组拆分为参数列表并可以作为现有参数列表的一部分包含在内:

params= ActionController::Parameters.new(person: {foo: 'something', bar: 'something else', name: 'Someone', age: 27, sex: 'M', random: 'not valid'})

# however you want to define and include these (method, constant, etc)
def common_params
  [:name, :age, :sex]
end

params.require(:person).permit(:foo, :bar, *common_params)
# => <ActionController::Parameters {"foo"=>"something", "bar"=>"something else", "name"=>"Someone", "age"=>27, "sex"=>"M"} permitted: true>

2018 年更新: Rails: 5.2.0 & Ruby: 2.5.1

像这样创建一个关注模块:

app/controllers/concerns/Xxxxx_helper.rb

module XxxxxHelper COMMON_STRONG_PARAMS = %i[ param1 param2 param3 ].freeze end

然后在你的控制器中执行:

def xxxxxx_params params.require(:xxxxxx).permit(:some_param :another_param, :another_param, :last_param, XxxxxHelper::COMMON_STRONG_PARAMS) end

这有效!