Cameron Bass Cameron Bass - 3 months ago 27
Ruby Question

Dynamic Strong params for require - Rails

I have an update method right now that will not work for all situations. It is hard coded in the strong params like this

params.require(:integration_webhook).permit(:filters)
that all fine right now but sometimes it may be
integration_webhook
and other times it needs to be
integration_slack
. Basically, is there a way that I don't need to hardcode the require in the strong params? I'll show my code for clarity.

Update Method:



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


As you can see it's a standard update method. But I need the integration_webhook params to be dynamic. I'm wondering if there is a model method I could call to strip away the integration_webhook part?

Answer

Not totally sure how dynamic this needs to be, but assuming that we are either getting an integratino_webhook or a 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

Checkout Strong parameters require multiple if this didn't answer your question.

Edit

For more dynamic requiring:

def update_params
  [:integration_webhook, :integration_slack].each do |model|
    return params.require(model).permit(:filters) if params.has_key?(model)
  end
end
Comments