首页 文章

nil的未定义方法`errors':NilClass

提问于
浏览
0

这是我的编辑细节:

我有我的控制器,

class Enr::Rds::SurvRdsapXrefsController < Enr::Controller

  def index
    @enr_rds_surv_rdsap_xrefs = Enr::Rds::SurvRdsapXref.paginate(page: params[:page])
  end

  def show
  end

  def new
     @enr_rds_surv_rdsap_xref = Enr::Rds::SurvRdsapXref.new
  end

  def edit
    @enr_rds_surv_rdsap_xref = Enr::Rds::SurvRdsapXref.find(params[:id])
  end

  def create
    @enr_rds_surv_rdsap_xref = Enr::Rds::SurvRdsapXref.new(params[:enr_rds_surv_rdsap_xref])

    respond_to do |format|
      if @enr_rds_surv_rdsap_xref.save
        format.html { redirect_to :enr_rds_surv_rdsap_xrefs, notice: "Survey link was successfully created." }
        format.js
        format.json { render json: @enr_rds_surv_rdsap_xref, status: :created, location: @enr_rds_surv_rdsap_xref }
      else
        format.html { render action: "new" }
        format.js
        format.json { render json: @enr_rds_surv_rdsap_xref.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
  end

  def destroy
  end
end

这是我的观点形式

<%= form_for(@enr_rds_surv_rdsap_xref, :remote => true) do |f| %>

<% if @enr_rds_surv_rdsap_xref.errors.any? %>
  <div id="error_explanation">
    <div class="validate">
      The form contains <%= pluralize@enr_rds_surv_rdsap_xref.errors.count, "error") %>.
    </div>
    <ul>
    <% @enr_rds_surv_rdsap_xref.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>

<div class="control-group">
  <%= f.label :section %>
<%= f.text_field :section %> </div> <%= f.submit %> <% end %>

当我单击索引页面来创建新链接时,索引页面显示错误就像

Enr / rds / surv_rdsap_xrefs #index中的NoMethodError

nil的未定义方法`errors':NilClass

感谢支持,请建议我纠正错误 . 我是ROR的新手 . 谢谢

3 回答

  • 0

    您的错误显示 index 模板的呈现导致错误,这意味着您将要执行此操作,您必须在 index 以及 new 中实例化新的调查 .

    最简单的,你可以将 new 中的代码复制到 index

    def index
      @enr_rds_surv_rdsap_xrefs = Enr::Rds::SurvRdsapXref.paginate(page: params[:page])
      @enr_rds_surv_rdsap_xref = Enr::Rds::SurvRdsapXref.new
    end
    
    def new
       @enr_rds_surv_rdsap_xref = Enr::Rds::SurvRdsapXref.new
    end
    

    为了使代码稍微干一些,您可能会更改创建新实例的位置 . 您经常会看到的模式类似于:

    before_filter :build_record, :only => [:new, :index]
    
    protected
    
    def build_record
      @survey = YourSurvey.new
    end
    

    这样,如果您没有任何其他逻辑,甚至不需要编写新的/索引方法 .

  • 2

    您是否还在控制器的新操作中设置了 @survey ?该错误意味着当呈现视图时 @survey 为nil,因此设置该实例变量时必定存在问题 .

    当您转到“新”视图或尝试提交表单(创建)时,是否收到错误?

  • 0
    The form contains <%= pluralize@enr_rds_surv_rdsap_xref.errors.count, "error") %>
    

    这行代码就是问题所在 . 你在复数和@enr之间缺少“(”)...

    解释:RoR认为对象是:pluralize @ enr ...而不是单独的@ All,并且他对这种对象没有错误 .

相关问题