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

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

このようにして、他のロジックがない場合でも、new/indexメソッドを作成する必要はありません。

于 2012-09-25T16:13:31.313 に答える
0

@surveyコントローラの新しいアクションも設定しますか?このエラーは、ビューがレンダリングされるときに@surveynilであるため、そのインスタンス変数の設定に問題があるはずであることを意味します。

「新規」ビューに移動したとき、またはフォームを送信(作成)しようとしたときにエラーが発生しますか?

于 2012-09-25T16:12:11.887 に答える