我正试图在一种类似于以下(伪代码)的方法中使用多个许可证
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
答案 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