2

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

假设我有: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).

4

3 回答 3

2

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

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>
于 2017-08-03T10:18:47.810 回答
0

关心

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

控制器

def person_params
  params
    .require(:person)
    .permit([:foo, :bar] | CommonHelper::COMMON_PARAMS)
end
于 2017-08-03T10:18:22.117 回答
0

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

这行得通!

于 2018-04-21T22:16:09.873 回答