#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1 #link-to
#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1 #ссылка на
Вопрос:
Я создаю форму для создания объекта экзамена, который начинается с 1 вопроса, и я хочу иметь кнопку для «Нового вопроса», которая будет отображаться в другом поле вопроса.
Форма отлично работает только с одним вопросом, моя проблема возникает, когда я пытаюсь создать ссылку на AJAX в другом поле вопроса. Если я использую что-то вроде:
<%= link_to "New Question", new_exam_question_path(@exam), :remote => true %>
rails выдает ошибку no route matches, потому что @exam на самом деле еще не существует. Если я заменю @exam на Exam.find(10), он будет работать должным образом, чтобы сгенерировать ссылку для экзамена 10.
В идеале я хотел бы иметь возможность задавать столько вопросов, сколько требуется. Мой единственный вопрос создается, как показано ниже, могу ли я повторно использовать этот код для вызова AJAX:
<%= form.fields_for :questions do |f| %>
<div class="edit_questions">
<div class="exam_question">
<%= f.hidden_field :question_type %>
<%= f.label "Question" %><br/>
<%= f.text_field :copy %>
<div>
<% if !f.object.id.blank? %>
<%= link_to "Delete", exam_question_path(@exam, f.object), :method=>:delete, :class => "button" %>
<% end %>
</div>
</div>
</div>
<% end %>
Комментарии:
1. Вы смотрели этот Railscast и его продолжение?
2. У меня нет, но я проверю это. Спасибо
3. эти 2 railscasts были бесценны, и теперь у меня все работает. Спасибо!
4. @AdamEberlin, переместил мой ответ в нужное место, у меня не было достаточного кредита на SO, чтобы сразу ответить на свой вопрос, поэтому я просто вставил его в вопрос, чтобы другие не тратили свое время. Спасибо за подсказку.
Ответ №1:
Решаемая: rails приведения 196 и 197 дают вам всю информацию, необходимую для решения моей проблемы.
это определенно не самое простое из исправлений, но эти приведения rails были очень похожи на то, что я пытаюсь сделать, поэтому я мог очень внимательно следить. Важно следовать соглашениям об именовании, показанным в приведении, поскольку они динамически создаются во время процесса, и он сломается, если вы не будете следовать соглашениям об именовании.
Ответ №2:
Почему бы просто не создать экземпляр пустого объекта exam в контроллере перед отображением представления?
@exam = Exam.new
Комментарии:
1. Это уже происходит в «новом» методе, но просмотр по-прежнему завершается неудачно, предположительно, потому, что в пуле нет идентификатора для ссылки.