Rails:未定义的方法`[]=' 用于 nil:NilClass 没有附件时具有活动记录

问题描述

我将邪恶宝石用于巫师形态。在我的表单的步骤之一中,我有上传附件的字段。我使用的是主动存储和 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] 上添加存在检查。

,

我成功了。

如果有人碰巧遇到这个问题 - 在向导的最后一步页面上,我只有文件上传字段。当我输入一个额外的随机输入字段时,它现在工作正常。

感谢指导。