Rails 3 form_for вложенных маршрутов - PullRequest
2 голосов
/ 03 июня 2011

Я пытаюсь создать form_for с вложенными маршрутами по примеру блога и комментариев из Ruby Guide (http://guides.rubyonrails.org/getting_started.html#adding-a-route-for-comments).

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

Это reoutes.rb

  resources :groups do
    resources :questions do
      resource :answers
    end
  end

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

группы / show.html.erb

<h2>Group: <%= @group.desc %> </h2>
<h3>Questions</h3>
<% @group.questions.each do |q| %>
   <%= q.desc%> <%= link_to 'Destroy question', [@group, q], :confirm => 'Are you sure?', :method => :delete %> <br/>
<%end%>

<h4>New question</h4>
<%= form_for([@group, @group.questions.build]) do |f| %>
  <div class="field">
    <%= f.label 'Label: '%>
    <%= f.text_field :desc, :size => 100%>
    <%= f.submit 'Create question'  %>
  </div>
<% end %>
<br />

Теперь мне нужно показать ответы и какой-нибудь способ вставить ответы на этот вопрос. Чтобы показать ответы хорошо работает с q.answers.each внутри блока @ group.questions.each. Но мне нужно сделать form_for для ответа, я попробовал приведенный ниже код, но он не работает:

группы / show.html.erb

...
<% @group.questions.each do |q| %>
   <%= q.desc%> <%= link_to 'Destroy question', [@group, q], :confirm => 'Are you sure?', :method => :delete %> <br/>
  <!-- New answer -->
  <%= form_for([q, q.answers.build]) do |f| %>
  <div class="field">
    <%= f.label 'Label: '%>
    <%= f.text_field :desc, :size => 100%>
    <%= f.submit 'Create answer'  %>
  </div>
<% end %> 

<%end%>
<h4> New question<h4>
...

Rails выдает ошибку:

неопределенный метод `Question_answers_path '

когда я пытаюсь использовать form_for ([q, q.answers.build]).

Любая помощь?

1 Ответ

1 голос
/ 03 июня 2011

В порядке, в котором вы указываете объекты в форме для вопросов, у вас есть ресурсы, вложенные в группы, затем вопросы, а затем, наконец, ответы. Вам нужно использовать что-то вроде form_for [g,q,q.answers.build]. Если это не сработает, отредактируйте ваше сообщение, включив в него содержимое rake routes, и мы можем перейти оттуда.

...