在Rails中覆盖Params

时间:2017-01-06 17:25:29

标签: ruby-on-rails

我的一个职能是创建新的代理商。参数来自提交的表格,在我使用的控制器中:

agency_params
      params.require(:agency).permit(:name, :cnpj, :country, :state, :city, :phone, :email, :platform_id)
end

在某些情况下(取决于用户角色)我不想允许任何platform_id,只需要特定的一个。

所以我的想法是:

def agency_params
      params.require(:agency).permit(:name, :cnpj, :country, :state, :city, :phone, :email, :platform_id)

      if current_user.platform
        params[:platform_id] = current_user.platform.id
      end
    end

但这似乎不起作用。我怎么能这样做?控制器在模型中是正确的位置还是更好?

谢谢!

1 个答案:

答案 0 :(得分:0)

我假设你在控制器方法中做了类似的事情:

def new
    @agency = Agency.new(agency_params)
    ...
end

在这种情况下,agency_params返回一个参数哈希以传递给new方法。在您的示例中,如果current_user.platform为真,则agency_params不返回参数哈希,而是返回params[:platform_id] = current_user.platform_id的结果。

您需要在返回参数hash之前修改:platform_id

def agency_params
    if current_user.platform
        params[:agency][:platform_id] = current_user.platform.id
    end
    params.require(:agency).permit(:name, :cnpj, :country, :state, :city, :phone, :email, :platform_id)
end