Rails的多个参数允许调用

时间:2019-07-12 18:51:07

标签: ruby-on-rails parameters

我正试图在一种类似于以下(伪代码)的方法中使用多个许可证

  def index
    model.create(
      params.permit(:b, :c)
    )
    params.permit(:a)
  end

这是我的实际代码

  def create
    params.permit(:create_special_categories)
    balance_sheet = ::BalanceSheet.create!(
      balance_sheet_params.merge(date: Time.zone.now.to_date, entity: @entity)
    )
    balance_sheet.create_special_categories if params[:create_special_categories]
    render json: balance_sheet, serializer: ::Api::V3::BalanceSheetSerializer
  end

  def balance_sheet_params
    params.permit(
      :id,
      :entity,
      :entity_id,
      :date,
      :name
    )
  end

但是,出现以下错误...

ActionController::UnpermittedParameters:
       found unpermitted parameter: :create_special_categories

更新

我的解决方案是一起避免使用强参数。

  def create
    balance_sheet = ::BalanceSheet.new(
      date: Time.zone.now.to_date, entity: @entity
    )
    balance_sheet.name = params[:name]
    balance_sheet.save!
    balance_sheet.create_special_categories if params[:create_special_categories]
    render json: balance_sheet, serializer: ::Api::V3::BalanceSheetSerializer
  end

1 个答案:

答案 0 :(得分:1)

此行没有任何作用,params.permit没有链接或添加到先前的permit,您必须使用结果,这就是为什么它几乎总是在单独的方法中使用的原因。 / p>

params.permit(:create_special_categories)

您必须做的就是使用以下语句返回的结果

permitted_params = params.permit(:create_special_categories)
Model.create(permitted_params) 

...但是,您实际上应该将此外包给像您已经拥有的特殊方法。显然,您将不得不对此进行调整。

def balance_sheet_params
  if params[:create_special_categories]
    params.permit(:id,
        :entity,
        :entity_id,
        :date,
        :name,
        :create_special_categories)
  else
      params.permit(
        :id,
        :entity,
        :entity_id,
        :date,
        :name)
  end
end