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