Ошибка answer_url при создании вики-приложения в Rails - PullRequest
1 голос
/ 23 февраля 2012

Привет. Я пытаюсь интегрировать вики в созданный мной сайт социальной сети. Я все еще в процессе создания вики, прежде чем интегрировать ее. Итак, я сначала сделал:

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 is:

   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!"}}

Итак, он добавляет ответ на вопрос, но по какой-то причине не перенаправляет его на ту же страницу вопроса. Когда я перезагружаю тот же вопрос, я нахожу новый ответ, который был добавлен. Не могли бы вы помочь мне понять, почему это происходит? Мне нужно иметь возможность добавить ответ к сообщению, и ответ должен появиться без перезагрузки или выдачи мне вышеуказанной ошибки. Благодарю.

1 Ответ

2 голосов
/ 23 февраля 2012

Проблема redirect_to @answer

Заменить на redirect_to @question

Остерегайтесь :location => @answer тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...