Привет. Я пытаюсь интегрировать вики в созданный мной сайт социальной сети. Я все еще в процессе создания вики, прежде чем интегрировать ее. Итак, я сначала сделал:
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!"}}
Итак, он добавляет ответ на вопрос, но по какой-то причине не перенаправляет его на ту же страницу вопроса. Когда я перезагружаю тот же вопрос, я нахожу новый ответ, который был добавлен. Не могли бы вы помочь мне понять, почему это происходит? Мне нужно иметь возможность добавить ответ к сообщению, и ответ должен появиться без перезагрузки или выдачи мне вышеуказанной ошибки. Благодарю.