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

时间:2017-08-03 10:05:08

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

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

假设我有几个控制器使用的: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)

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

关注

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

控制器

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

答案 2 :(得分:0)

更新2018年: Rails:5.2.0&amp; 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

这有效!