簡體   English   中英

Rails的多個參數允許調用

[英]Rails multiple params permit calls

我正在嘗試在與以下類似的單一方法中使用多個許可證(偽代碼)

  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

UPDATE

我的解決方案是一起避免使用強參數。

  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

這行沒有任何作用, params.permit不會鏈接或添加到先前的permit ,您必須使用結果,這就是為什么它幾乎總是在單獨的方法中使用的原因。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM