2012-02-22 3 views
1

こんにちは私は作成したソーシャルネットワーキングサイトにwikiを統合しようとしています。私はまだそれを統合する前にwikiを作成しています。だから私は、最初に作られた、次のようにRailsでwikiアプリケーションを作成中にanswer_urlエラーが発生しました

rails generate scaffold Question title:string body:text

rails generate scaffold Answer question_id:integer body:text

ごとに、私のモデルファイルは、次のとおりです。

question.rb:

class Question < ActiveRecord::Base 
    has_many :answers 
    validates :title, :presence => true 
    validates :body, :presence => true 
end 

answer.rb

class Answer < ActiveRecord::Base 
    belongs_to :question 
    validates :question_id, :presence => true 
    validates :body, :presence => true 
end 

次のように私のコントローラのファイルは以下のとおりです。

question_controller.rb:

class QuestionsController < ApplicationController 
    def index 
     @questions = Question.all 

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

    def show 
      @question = Question.find(params[:id]) 

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

    def new 
      @question = Question.new 

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

    def edit 
      @question = Question.find(params[:id]) 
    end 


    def create 
     @question = Question.new(params[:question]) 

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

    def update 
     @question = Question.find(params[:id]) 

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

answer_controller.rbは次のとおりです。

class AnswersController < ApplicationController 

     def new 
     @answer = Answer.new 

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

    def create 
     @question = Question.find(params[:question_id]) 
     @answer = @question.answers.create!(params[:answer]) 

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

最後に私のルートファイルは次のとおりです。

routes.rbを

SampleApp::Application.routes.draw do 

    resources :questions do 
     resources :answers 
    end 
........................ 
質問に対する

ビューファイルは次のとおりです。

show.html.erb:

 <%= render :partial => @question %> 
    <%= link_to 'Edit', edit_question_path(@question) %> | 
    <%= link_to 'Back', questions_path %> 
    <br/> <br/> 
    <h4>Answers</h4> 
    <div id="answers"> 
    <% @question.answers.each do |answer| %> 
    <%= div_for answer do %> 
     <p> <strong> 
     Posted <%= time_ago_in_words(answer.created_at) %> 
     </strong> 
     <br /> <%= h(answer.body) %> 
     </p> 
    <% end %> 
    <% end %> 
    </div> 

    <%= form_for [@question, Answer.new] do |f| %> 
    <p> 
    <%= f.label :body, "New Answer" %> 
    <br /> 
    <%= f.text_area :body %> 
    </p> 
    <p><%= f.submit "Add Answer" %></p> 
    <% end %> 

私は新しい質問を作成しよう

がある私にエラーを与えるものではありません。私はすでに作成した質問を開くと、それは、コンテンツを表示するが、私はそれは私に次のエラーを与え、既に作成した質問に対する新しい回答を追加しようとしているとき、私は、エラーが生じています:

**NoMethodError in AnswersController#create** 

     undefined method `answer_url' for #<AnswersController:0x103273c70> 
     app/controllers/answers_controller.rb:18:in `create' 
     app/controllers/answers_controller.rb:16:in `create' 

    **Request** 

    **Parameters:** 

     {"question_id"=>"1", 
     "commit"=>"Add Answer", 
     "authenticity_token"=>"ttPniOSpgGDMRu7+OJW2eS5rJMV/+ivVNOeI+rWOUPY=", 
     "utf8"=>"\342\234\223", 
     "answer"=>{"body"=>"ok!"}} 

だから、それはやっていることです質問への回答を追加していますが、何らかの理由でそれを同じ質問ページにリダイレクトしていません。私は同じ質問をリロードするとき、私は追加された新しい答えを見つける。だからなぜこれが起こっているのか、私を助けてもらえますか?私はポストへの回答を追加できるようにする必要があり、答えはリロードせずに表示されるか、上記のエラーを表示する必要があります。ありがとう。

答えて

2

問題があまりにも:location => @answerの用心redirect_to @question

と交換redirect_to @answer

です。

+0

ありがとうございました。それは働いた!! – Maddy

+0

あなたは次のことに注意しましたか?location => @answer ?! – Maddy

+0

これは、私が思い出す限り、同じではない経路を探します – apneadiving

関連する問題