问题描述
我将邪恶宝石用于巫师形态。在我的表单的步骤之一中,我有上传附件的字段。我使用的是主动存储和 Rails 6。
在我看来
<%= f.file_field :plan %>
<%= f.file_field :appraisal %>
<%= f.file_field :flow %>
在我的 sale_steps 控制器中
def show
@sale = current_user.sales.find(params[:sale_id])
render_wizard
end
def update
@sale = current_user.sales.find(params[:sale_id])
params[:sale][:status] = step.to_s **(the error is on this line)**
@sale.update(sale_params)
render_wizard @sale
end
def sale_params
params.require(:sale).permit(.... :plan,:appraisal,:flow)
end
在我的模型中
has_one_attached :plan
has_one_attached :appraisal
has_one_attached :flow
validates :location,presence: true,if: -> { status?(:second_step) }
def status?(step_key)
status == step_key.to_s (this is to allow validations on each step - I have no validations defined for my attachments)
end
在我的表单中,当我到达向导的最后一步上传附件时,只要存在至少一个附件,它就可以正常工作。但是,如果不存在附件,我会在单击更新时收到以下无方法错误:
undefined method `[]=' for nil:NilClass
{"_method"=>"put","authenticity_token"=>"[FILTERED]","commit"=>"Continue","sale_id"=>"37","id"=>"fourth_step"}
我只是想知道为什么会这样(这与邪恶的宝石有关还是其他什么?)有没有我可以尝试的解决方案? ty
解决方法
根据错误,当没有上传附件时,params[:sale]
的值为 nil
。因此,当您尝试设置 params[:sale][:status]
时,会出现 undefined method []=' for nil:NilClas
错误。在将值分配给 params[:sale]
之前,您应该在 params[:sale][:status]
上添加存在检查。
我成功了。
如果有人碰巧遇到这个问题 - 在向导的最后一步页面上,我只有文件上传字段。当我输入一个额外的随机输入字段时,它现在工作正常。
感谢指导。