【问题标题】:Multi nested form in ruby on railsruby on rails 中的多嵌套形式
【发布时间】:2016-09-19 17:25:04
【问题描述】:

我有一个场景,我的应用程序与三个模型交互,称为用户、问题和答案。我从管理面板或通过 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 %>

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

【问题讨论】:

    标签: ruby-on-rails-4 nested-forms


    【解决方案1】:

    如果您使用 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
    

    【讨论】:

    • 我试过了,但它显示我的关联无效。确保 accept_nested_attributes_for 用于 :answers 关联。
    • 编辑答案添加。
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多