Rails — отладка вложенных маршрутов

У меня есть 2 модели, Оценки и Вопросы. Оценки вызывают много вопросов.

В маршрутах у меня есть:

map.resources :assessments, :has_many => :questions
map.root :assessments

Я проверил рейк-маршруты, все в порядке.

В форме для создания нового вопроса я получаю следующую ошибку:

undefined method `questions_path' for #<ActionView::Base:0x6d3cdb8>

Если я вынимаю форму, представление загружается нормально, поэтому я думаю, что это что-то с кодом в этом представлении - я получаю сообщение об ошибке в строке form_for:

<h1>New question</h1>

<% form_for [@assessment, @question] do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :content %><br />
    <%= f.text_field :content %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

<%= link_to 'Cancel', assessment_path(@assessment) %>

Рейк-маршруты — http://pastebin.com/6fKUPTjq

Код для контроллера вопросов — http://pastebin.com/URzpmEcg

Код для контроллера оценки — http://pastebin.com/HstvFTq4

Может ли кто-нибудь помочь мне отладить его? Спасибо!


person stringo0    schedule 09.06.2010    source источник
comment
Думаю, правильный метод должен быть Assessment_questions_path. Не уверен, почему вызывается questions_path.   -  person alternative    schedule 10.06.2010
comment
Да, оценка_вопросов_путь - это то, что я думаю, что это должно вызываться, но я не уверен, почему это не так.   -  person stringo0    schedule 10.06.2010
comment
Не могли бы вы вставить код для контроллера?   -  person alternative    schedule 10.06.2010
comment
сделано - я добавил код контроллера.   -  person stringo0    schedule 10.06.2010
comment
Я не совсем уверен, но знаете ли вы, что рельсы автоматически определяют @assessment для вас в случае вложенных маршрутов? Может быть ноль.   -  person alternative    schedule 10.06.2010
comment
Не уверен - изучаю этот вопрос.   -  person stringo0    schedule 10.06.2010
comment
Я думаю, что это может быть так, и он пытается вернуться к мелкой маршрутизации, которую вы не включили, что вызывает ошибку. Хотя в этом случае он действительно должен сообщать о нулевом значении как об ошибке.   -  person alternative    schedule 10.06.2010
comment
Я получаю представление по этой ссылке - ‹%= link_to 'Новый вопрос', new_assessment_question_path(@assessment) %› Таким образом, значение не должно быть нулевым.   -  person stringo0    schedule 10.06.2010
comment
Я не совсем уверен, но думаю, что можно установить только Assessment_id, а не Assessment. Попробуйте добавить @assessment = Assessment.find(params[:assessment_id]) в контроллер.   -  person alternative    schedule 10.06.2010
comment
Добавление этого позволяет мне видеть новую страницу вопроса, но если я нажму «Отправить», я получу ошибку NoMethodError в Questions#create — но это, безусловно, прогресс!   -  person stringo0    schedule 10.06.2010
comment
О, и хэш параметров, если он доступен через отладку.   -  person alternative    schedule 10.06.2010
comment
Эта ошибка исчезла после добавления @assessment = Assessment.find(params[:assessment_id]) в функцию создания - я попытаюсь немного отладить это самостоятельно - я отправлю сообщение через 20 минут. Спасибо за помощь!   -  person stringo0    schedule 10.06.2010
comment
Я не понимаю, как это помогло... Вы никогда не используете @assessment. Я собирался предложить использовать @assessment.questions.new вместо Question.new после определения @assessment.   -  person alternative    schedule 10.06.2010
comment
На самом деле, я вижу, как это поможет, только если не пройдет проверки.   -  person alternative    schedule 10.06.2010
comment
Хм - спасибо за помощь! Позже я смогу провести рефакторинг кода, но совет @assessment = Assessment.find(params[:assesment_id]) был убийственным! Как я могу дать вам баллы за это? Может быть, просто опубликуйте этот совет, и я отмечу его как ответ, потому что это действительно устранило ошибку.   -  person stringo0    schedule 10.06.2010


Ответы (1)


Тебе нужно иметь

@assessment = Assessment.find(params[:assessment_id])

в контроллере. В противном случае @assessment равно nil.

person alternative    schedule 10.06.2010
comment
Всем спасибо за помощь и терпение :) - person stringo0; 10.06.2010