【问题标题】:Rails 3 form_for Nested RoutesRails 3 form_for 嵌套路由
【发布时间】:2011-09-07 10:00:51
【问题描述】:

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

我正在做一个应用程序来创建包含很多问题的调查,这些问题在一个组中,每个问题都有一个或多个答案选项。

这是reoutes.rb

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

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

groups/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 来回答,我尝试了下面的代码,但没有工作:

groups/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]) 时。

有什么帮助吗?

【问题讨论】:

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


    【解决方案1】:

    您在表单中指定对象的顺序是,您将资源嵌套在组下,然后是问题,最后是答案。你需要使用form_for [g,q,q.answers.build] 之类的东西。如果这不起作用,请编辑您的帖子以包含 rake routes 的内容,我们可以从那里开始。

    【讨论】:

    • 伟大的德文!!现在它正在工作,请回复。此示例的正确语法是:form_for([@group, q, q.answers.build])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多