У меня есть представление о том, что идет не так, но я не могу исправить это.
Чтобы объяснить мою ситуацию еще раз, у меня есть 3 элемента: задания, вопросы и ответы. Все отношения установлены ниже. Расширяя свой предыдущий вопрос, который был связан с отношением «Работа»> «Вопросы», теперь я добавил отношение «Ответы» в «Работа»> «Вопросы»> «Ответы».
Итак, с новым ресурсом в моем route.rb я получал ошибки маршрутизации, которые я исправлял по ходу дела. Проблема возникла, когда я добрался до формы Ответы # новая страница и мне пришлось изменить форму form_for scaffolding и собрать действие Создать в контроллере ответов (вы можете увидеть мой код для этих двух ниже).
Мне удалось исправить это достаточно, чтобы показать форму на странице новых ответов, но когда я нажимаю кнопку Отправить, я получаю эту ошибку:
No route matches {:action=>"show", :controller=>"answers", :job_id=>nil, :question_id=>1, :id=>#<Answer id: 3, job_id: nil, question_id: 1, answer1: "", answer2: "", answer3: "", answer4: "", answer5: "", created_at: "2011-07-01 03:12:06", updated_at: "2011-07-01 03:12:06">}
Из этой ошибки я вижу, что я не сохраняю job_id, и я почти уверен, что это связано со мной, когда я не вызываю job_id должным образом ни в моих действиях по созданию ответов, ни в ответах на новый код form_for. Я перепробовал кучу решений, но, похоже, ничего не работает. Я чувствую, что я близок к своему действию создания, но не могу понять это правильно. В любом случае, заранее спасибо за любую помощь, и если я не предоставил вам достаточно окружающего кода, дайте мне знать, и я добавлю его.
Этот вопрос является продолжением этого поста: Ссылка на проблему маршрутизации со вложенными ресурсами
P.S. Я также добавил, что мои ответы показывают действие, потому что, хотя оно работает правильно, если я перейду к ответам / 1 / напрямую. У меня просто такое ощущение, что если мое творческое действие неверно, то и мое шоу-действие тоже.
Модель:
class Job < ActiveRecord::Base
has_many :questions
has_many :answers
class Question < ActiveRecord::Base
belongs_to :job
has_many :answers
class Answer < ActiveRecord::Base
belongs_to :job
belongs_to :question
Ответы # новая форма
<%= form_for(@answer, :url => job_question_answers_path(@answer.job_id, @question)) do |f| %>
Ответы создать действие
def create
@job = Job.find(params[:job_id])
@question = @job.questions.find(params[:question_id])
@answer = @question.answers.build(params[:answer])
if @answer.save
redirect_to(job_question_answer_path(@answer.job_id, @answer.question_id, @answer)
end
end
Ответы показывают действие
def show
@job = Job.find(params[:job_id])
@question = @job.questions.find(params[:question_id])
@answer = @question.answers.find(params[:id])
end
См. https://gist.github.com/1057810 для моих самых последних рейк-маршрутов. Я знаю, что я не должен вкладывать более 1 слоя в глубину, но это было самое простое и быстрое решение для меня.
Еще раз спасибо!