ruby-on-rails - 在Rails 4中使用单个表单保存多个记录

标签 ruby-on-rails ruby-on-rails-4

我有一个名为Family的模型,其中belongs_to :user我想让用户以/views/families/new.html.erb的单一形式添加多个家庭成员

  • 因此,用户看到了一个表单,用于为一个user_id创建3个家庭成员
  • 以3种相同的形式输入数据,然后命中提交
  • 提交一次
  • 后,应将 3个单独表格中的数据保存为3个不同的记录在数据库中
  • 现在,当我提交表单时,数据库中的所有值都保存为NULL。
  • 我在做什么错?我不应该使用强参数吗?

  • 编辑:对不起,我早些时候应该提供了更详细的代码
    在代码中稍加修改后
    # config/routes.rb
    resources :families
    
    #app/models/user.rb 
    class User < ActiveRecord::Base
      has_many :families
    end
    
    #app/models/family.rb
    class Family < ActiveRecord::Base
      belongs_to :user
    end
    
    #app/controllers/families_controller.rb
    class FamiliesController < ActiveRecord::Controller
      def new
      end
      
      def create
        @family = Family.new(family_params)
        a = params[:family][:"0"]
        @family.user_id = current_user.id
        if @family.save
          flash[:notice] = params[:family][:"0"]
          redirect_to dummy_path
        else
          flash[:notice] = "didnt happen"
        end
      end
      
      private
      
      def family_params
        params.require(:family).permit(:all)
      end
    end
    
    #app/views/families/_form.html.erb
    <%= form_tag(controller: "families") do %>
      <% i = 0 %>
      <% 3.times do %>
        <br>
        <h2>Family Member # <%= i+1 %> : </h2>
        <br>
        <%= fields_for("family[#{i}]") do |f| %>
            <%= f.text_field :name, class: "form-control" , placeholder: "Name"%> <br>
            <%= f.text_field :relationship, class: "form-control" , placeholder: "Relationship" %> <br>
            <%= f.date_field :dob, class: "form-control" %> <br>
            <%= f.text_field :blood_group, class: "form-control", placeholder: "Blood group" %> <br>
            <%= f.text_field :email, class: "form-control", placeholder: "Email" %> <br>
            <%= f.number_field :phone, class: "form-control", placeholder: "Phone number" %> <br>
            <%= f.text_area :hobbies, class: "form-control", placeholder: "Hobbies" %> <br>
            <% i=i+1 %>
        <% end %>
        <hr>
      <% end %><br>
      <%= submit_tag "Submit", class: "btn btn-primary" %> <br>
    <% end %>
    

    最佳答案

    您要使用nested forms。您应该能够复制并粘贴以下代码以开始操作:

    应用程序/模型/family.rb

    class Family < ActiveRecord::Base
      has_many :users
    
      accepts_nested_attributes_for :users
    end
    

    应用程序/模型/user.rb
    class User < ActiveRecord::Base
      belongs_to :family
    end
    

    应用程序/ View /家庭/new.html.erb
    <%= form_for(@family) do |f| %>
      <%= f.fields_for :users do |user| %>
        <p>
        <%= user.text_field :name %><br>
        <%= user.text_field :email %>
        </p>
      <% end %>
    
      <%= f.submit %>
    <% end %>
    

    应用/ Controller /家庭_controller.rb
      [...]
    
      def new
        @family = Family.new
        3.times { @family.users.build }
      end
    
      [...]
    
      private
        # Use callbacks to share common setup or constraints between actions.
        def set_family
          @family = Family.find(params[:id])
        end
    
        # Never trust parameters from the scary internet, only allow the white list through.
        def family_params
          params.require(:family).permit(:name, users_attributes: [ :name, :email ])
        end
    

    关于ruby-on-rails - 在Rails 4中使用单个表单保存多个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23673513/

    相关文章:

    mysql - 为什么在mysql中使用limit和offset时记录丢失?

    ruby-on-rails - Ruby on Rails - RSpec 测试随机失败

    ruby-on-rails-4 - 如何从源代码在 Red Hat OS 中安装 FFMPEG?

    node.js - 使用 Active Directory 进行身份验证/SSO 的外部 Rails/Node 应用程序

    ruby-on-rails - Rails 4 ArgumentError - 参数数量错误

    ruby-on-rails - 有没有办法重命名 ActiveRecord 模型列?

    ruby-on-rails - ActionController::InvalidAuthenticityToken 和域名

    mysql - 具有自定义外键列名称的 Activeadmin 表单

    ruby-on-rails - 使用 ApplicationController.renderer.render 从 Controller 外部渲染的 Rails 5 不会在自身上设置变量

    ruby-on-rails - 如何访问在 before 子句中创建的 has_many 模型