Rails 3 form_for嵌套路由

时间:2011-06-02 21:32:36

标签: ruby-on-rails nested-forms form-for nested-form-for

我正在尝试使用嵌套路由执行一个form_for,遵循Ruby指南中的博客和评论示例(http://guides.rubyonrails.org/getting_started.html#adding-a-route-for-comments)。

我正在申请创建包含大量问题的调查,问题在一个小组中,每个问题都有一个或多个答案选项。

这是reoutes.rb

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

控制器运行良好,当我显示创建的组时,可以看到问题并使用嵌套的form_for创建问题:

基团/ 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 />

现在我需要展示答案和一些方法来将问题插入到问题中。要显示答案在@ group.questions.each块中的q.answers.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 个答案:

答案 0 :(得分:1)

您在表单中为事项指定对象的顺序,您拥有嵌套在组下的资源然后问题然后最终答案。您需要使用form_for [g,q,q.answers.build]之类的内容。如果该dosnt工作编辑您的帖子以包含rake routes的内容,我们可以从那里开始。