rails ruby 中的多嵌套表单

Multi nested form in ruby on rails

我有一个场景,我的应用程序与三个模型交互,分别称为用户、问题和答案。我从管理面板或通过 rails 控制台为用户添加了三个问题。现在,在单独的操作中,我需要显示特定用户的所有问题,并提供为每个问题添加多个答案作为文本的选项。我不知道如何进一步进行。这是我试过的示例代码。

   class User
     has_many :questions
     accepts_nested_attributes_for :questions
   end

   class Question
     belongs_to :user
     has_many :answers
     accepts_nested_attributes_for :answers
   end

   class Answer
      belongs_to :question
   end

   users_controller.rb
   class UserController
    def display_questions
      @user = current_user
    end
   end

   views/display_questions.html.erb
   <%= form_for @user do |f| %>
       <%= f.fields_for :questions do |q| %>
         <%= q.fields_for :answers do |a| %>
             <%= a.text_field :name %>
         <% end %>
         <%= q.link_to_add 'Add', :answers %>
       <% end %>
   <% end %>

我收到了该用户的所有问题,但无法为个别问题添加答案。我很困惑如何为这些场景构建嵌套字段,感谢您的帮助。谢谢

如果你使用 nested_form gem 就很简单了,只需做:

<%= nested_form_for @user do |f| %>
    <%= f.fields_for :questions do |q| %>
        <%= q.fields_for :answers do |a| %>
            <%= a.text_field :name %>
        <% end %>
        <%= q.link_to_add 'Add', :answers %>
    <% end %>
<% end %>

注意 nested_form_for 而不是 form_for

此外,您还需要为对应的型号添加属性 accepts_nested_attributes_for

class User < ActiveRecord::Base
  has_many :questions
  accepts_nested_attributes_for :questions
end

class Question < ActiveRecord::Base
  belongs_to :user
  has_many :answers
  accepts_nested_attributes_for :answers
end

class Answer < ActiveRecord::Base
  belongs_to :question
end