1

一部のレールキャストが古い可能性があることは理解していますが、改訂されるべきではありません。ネストされたフォームを克服するために一生懸命努力していますが、ほとんどの答えはプラグインを使用することです。そこで、ゼロからレールキャストを作成しようとしましたが、例外が発生しました。今日のRailcasts 196の更新版には、適切なコードが含まれているのでしょうか。

ここに私のコードがありますが、私のばかげた間違いかもしれません。

調査モデル

class Survey < ActiveRecord::Base
  has_many :questions, :dependent => :destroy
  accepts_nested_attributes_for :questions , :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
  attr_accessible :name, :questions_attributes
end

質問モデル

class Question < ActiveRecord::Base
  belongs_to :survey
  attr_accessible :content, :question_id

  accepts_nested_attributes_for :answers , :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
  attr_accessible :name, :answers_attributes
end

回答モデル

class Answer < ActiveRecord::Base
  belongs_to :questions
  attr_accessible :content, :question_id
end

アンケートショーフォーム

<p id="notice"><%= notice %></p>

<div>Name:</div>
<div><%=@survey.name%></div>
<% for question in @survey.questions %>
<div><%=h question.content%></div>
<% end %>

<%= link_to 'Edit', edit_survey_path(@survey) %> |
<%= link_to 'Back', surveys_path %>

Form.html.erb

<%= form_for(@survey) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>

  <%= f.fields_for :questions do |bf|%>
    <% render 'question_fields, :f => bf %>
  <% end %>
  ***<div class="actions">***
    <%= f.submit %>
  </div>
<% end %>

question_field フォーム

<%= f.label :content, "Question" %><br />
<%= f.text_area :content, :rows=> 3 %><br />
<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove Question"%><br />

<%= f.fields_for :answer do |form| %>
  <%= render 'answer_fields', :f => form %>
<% end %>

answer_field フォーム

<%= f.label :content, "Answer" %>
<%= f.text_field :content %>
<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove" %>

サーベイコントローラー

class SurveysController < ApplicationController
  # GET /surveys
  # GET /surveys.json
  def index
    @surveys = Survey.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @surveys }
    end
  end

  # GET /surveys/1
  # GET /surveys/1.json
  def show
    @survey = Survey.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @survey }
    end
  end

  # GET /surveys/new
  # GET /surveys/new.json
  def new
    @survey = Survey.new
    3.times {@survey.questions.build }

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @survey }
    end
  end

  # GET /surveys/1/edit
  def edit
    @survey = Survey.find(params[:id])
  end

  # POST /surveys
  # POST /surveys.json
  def create
    @survey = Survey.new(params[:survey])

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

  # PUT /surveys/1
  # PUT /surveys/1.json
  def update
    @survey = Survey.find(params[:id])

    respond_to do |format|
      if @survey.update_attributes(params[:survey])
        format.html { redirect_to @survey, notice: 'Survey was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @survey.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /surveys/1
  # DELETE /surveys/1.json
  def destroy
    @survey = Survey.find(params[:id])
    @survey.destroy

    respond_to do |format|
      format.html { redirect_to surveys_url }
      format.json { head :no_content }
    end
  end
end

ここに新しい調査を作成するときの私のエラー 他に何が間違っているのかわかりません

ArgumentError in SurveysController#create    
No association found for name `answers'. Has it been defined yet?

ここで新しいエラー

SyntaxError in Surveys#new

Showing /home/jean/rail/surveysays/app/views/surveys/_form.html.erb where line #22 raised:

/home/jean/rail/surveysays/app/views/surveys/_form.html.erb:22: syntax error, unexpected keyword_class, expecting keyword_do or '{' or '('
@output_buffer.safe_concat('  <div class="actions">
                                        ^
/home/jean/rail/surveysays/app/views/surveys/_form.html.erb:24: unterminated regexp meets end of file
/home/jean/rail/surveysays/app/views/surveys/_form.html.erb:24: syntax error, unexpected $end, expecting keyword_end
4

1 に答える 1

2

Question モデルに追加has_many :answersし、Answer モデルを に変更しbelongs_to :questionます。

于 2012-08-03T20:41:30.633 に答える