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 %><br />
  <%= f.text_field :section %>
</div>

<%= f.submit %>

<% end %>

当我单击索引页面创建新链接时,索引页面显示错误,例如

Enr/rds/surv_rdsap_xrefs#index 中的 NoMethodError

nil:NilClass 的未定义方法“错误”

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

4

3 回答 3

2

您的错误表明index模板的呈现导致了错误,这意味着您正在为索引模板中的新调查(上面的代码片段)呈现表单。这很好,但如果你要这样做,你必须在 和 中实例化一个新的index调查new

在最简单的情况下,您可以将代码复制newindex

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

这样,如果您没有任何其他逻辑,您甚至不需要编写 new/index 方法。

于 2012-09-25T16:13:31.313 回答
0

您是否还在@survey控制器中设置了新操作?该错误意味着当视图被渲染时@survey为零,因此设置该实例变量肯定有问题。

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

于 2012-09-25T16:12:11.887 回答
0
The form contains <%= pluralize@enr_rds_surv_rdsap_xref.errors.count, "error") %>

这行代码就是问题所在。您在复数形式和@enr 之间缺少“(”...

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

于 2013-07-07T02:51:49.250 回答