Ruby on rails 在强参数中添加参数
假设我有这样的参数:Ruby on rails 在强参数中添加参数,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,假设我有这样的参数: def boat_params params .require(:boat) .permit(:message :alarm_en, :alarm_es, :alarm_sv) end 我尝试的基本上是缩短此代码,包括: 但对于报警参数我在尝试时出现错误: 在.merge(报警参数) 我错了什么?谢谢 您正在对permit的结果调用merge,该结果返回Ac
def boat_params
params
.require(:boat)
.permit(:message
:alarm_en,
:alarm_es,
:alarm_sv)
end
我尝试的基本上是缩短此代码,包括: 但对于
报警参数
我在尝试时出现错误:
在.merge(报警参数)
我错了什么?谢谢 您正在对
permit
的结果调用merge
,该结果返回ActionController::Parameters
,而不是通用哈希
由于permit
接受一个数组,因此实际上可以执行以下操作:
def alarm_params
%w{ alarm_en alarm_es alarm_sv }
end
def boat_params
params.require(:boat).permit(:message, *alarm_params)
end
如果您想使用元编程来提取语言列表并为每种语言创建允许的参数,就像您当前在报警参数中所做的那样,您可以更容易地执行以下操作:
def languages
# possibly use a more global config var, or ENV
# e.g. ENV['SUPPORTED_LANGUAGES']
%w{ en es sv }
end
def alarm_params
languages.map { |lang| "alarm_#{lang}" }
end
不需要每个
,也不需要显式的返回
许可证的参数是数组,而不是散列。您可以尝试使用splat运算符*
def boat_params
params
.require(:boat)
.permit(:message, *alarm_params)
end
在我看来,这是一次糟糕的重构。无论如何,请尝试使用.permit(:message*alarm_参数)并将alarm_参数设置为数组
def alarm_params
params = []
["en","es","sv"].each do |lang|
params << "alarm_#{lang}"
end
return params
end
undefined method `to_hash'
def alarm_params
%w{ alarm_en alarm_es alarm_sv }
end
def boat_params
params.require(:boat).permit(:message, *alarm_params)
end
def languages
# possibly use a more global config var, or ENV
# e.g. ENV['SUPPORTED_LANGUAGES']
%w{ en es sv }
end
def alarm_params
languages.map { |lang| "alarm_#{lang}" }
end
def boat_params
params
.require(:boat)
.permit(:message, *alarm_params)
end