我现在有一种更新方法,不适用于所有情况。它在像params.require(:integration_webhook).permit(:filters)
这样强大的参数中是硬编码的,现在一切都很好但有时它可能是integration_webhook
,有时它需要integration_slack
。基本上,有没有一种方法我不需要在强对数中硬编码需求?为了清楚起见,我会展示我的代码。
def update
@integration = current_account.integrations.find(params[:id])
attrs = params.require(:integration_webhook).permit(:filters)
if @integration.update_attributes(attrs)
flash[:success] = "Filters added"
redirect_to account_integrations_path
else
render :filters
end
end
正如您所看到的,它是一种标准的更新方法。但我需要integration_webhook参数是动态的。我想知道是否有一种模型方法可以调用以去除integration_webhook部分?
答案 0 :(得分:1)
不完全确定这需要多么动态,但假设我们要么获得integratino_webhook
或integration_slack
。
def update
@integration = current_account.integrations.find(params[:id])
if @integration.update_attributes(update_params)
# ...
else
# ...
end
end
private
def update_params
params.require(:integration_webhook).permit(:filters) if params.has_key?(:integration_webhook)
params.require(:integration_slack).permit(:filters) if params.has_key?(:integration_slack)
end
结帐Strong parameters require multiple如果这不能解答您的问题。
更具动态性:
def update_params
[:integration_webhook, :integration_slack].each do |model|
return params.require(model).permit(:filters) if params.has_key?(model)
end
end
答案 1 :(得分:0)
在我的头顶上这样的东西应该有效。命名约定不是最好的,但如果需要,结构将允许您只添加到列表中。
def update
@integration = current_account.integrations.find(params[:id])
if @integration.update_attributes(webhook_and_slack_params)
flash[:success] = "Filters added"
redirect_to account_integrations_path
else
render :filters
end
end
def webhook_and_slack_params
[:integration_webhook, :integration_slack].each do |the_params|
if(params.has_key?(the_params))
params.require(the_params).permit(:filters)
end
end