需求的动态强对数 - Rails

时间:2016-09-04 23:00:54

标签: ruby-on-rails ruby dynamic strong-parameters

我现在有一种更新方法,不适用于所有情况。它在像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部分?

2 个答案:

答案 0 :(得分:1)

不完全确定这需要多么动态,但假设我们要么获得integratino_webhookintegration_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