如何使用关注文件向控制器 添加强参数?
假设我有几个控制器使用的: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)
。
答案 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
这有效!