В Rails, как мне создать ссылку на новый дочерний элемент, когда родительский элемент еще не существует? - PullRequest
1 голос
/ 09 октября 2011

Я создаю форму для создания объекта экзамена, который начинается с 1 вопроса, и я хочу иметь кнопку «Новый вопрос», которая будет AJAX в другом поле вопроса.

Форма отлично работает только с одним вопросом, моя проблема возникает, когда я пытаюсь создать ссылку на AJAX в другом поле вопроса.Если я использую что-то вроде:

<%= link_to "New Question", new_exam_question_path(@exam), :remote => true %>

rails выдает ошибку отсутствия маршрута, потому что @exam на самом деле еще не существует.Если я заменю @exam на Exam.find (10), он сработает правильно, чтобы сгенерировать ссылку для экзамена 10.

В идеале я хотел бы иметь возможность задавать AJAX столько вопросов, сколько требуется.Мой единственный вопрос создается, как показано ниже, могу ли я повторно использовать этот код для вызова 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 %>

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Решено: рельсы 196 и 197 дают вам всю необходимую информацию для решения моей проблемы.

это определенно не самое простое из исправлений, но приведение этих рельсов было очень похоже на то, что я пытаюсь сделать, поэтому я мог очень внимательно следить. Следование соглашениям по присвоению имен, показанным в приведении, очень важно, так как они динамически создаются в процессе, и оно сломается, если вы не будете следовать соглашениям по присвоению имен.

0 голосов
/ 09 октября 2011

Почему бы просто не создать пустой экземпляр объекта экзамена в контроллере перед рендерингом представления?

@exam = Exam.new
...