Ruby on rails Rails-使用字段创建多个嵌套对象

Ruby on rails Rails-使用字段创建多个嵌套对象,ruby-on-rails,nested-forms,form-for,fields-for,nested-form-for,Ruby On Rails,Nested Forms,Form For,Fields For,Nested Form For,希望有人能帮上忙。我有两种型号的订单和日期订单。每个订单可以有多个日期订单,我应该能够在创建订单时创建多个日期订单 我该怎么做?如您所见,我的代码在创建一个日期订单并将其与创建的订单关联方面运行良好 更新:我尝试在我的订单/新文件中创建许多“构建器”。它在视图上工作,当我输入多个日期和时间时,它创建了一个订单。但是的字段没有创建任何日期订单 orders_controller.rb def new @order = Order.new @order.date_orders.bui

希望有人能帮上忙。我有两种型号的订单和日期订单。每个订单可以有多个日期订单,我应该能够在创建订单时创建多个日期订单

我该怎么做?如您所见,我的代码在创建一个日期订单并将其与创建的订单关联方面运行良好

更新:我尝试在我的订单/新文件中创建许多“构建器”。它在视图上工作,当我输入多个日期和时间时,它创建了一个订单。但是的字段没有创建任何日期订单

orders_controller.rb

def new
    @order = Order.new
    @order.date_orders.build
end

def create
    @order = Order.new(order_params)
    if @order.save
        flash[:success] = "blah"
        redirect_to @order
    else
        render 'new'
    end
end

private

def order_params
    params.require(:order).permit(:user_id, :purpose, 
    date_orders_attributes: [:id, :order_date, :time_start, :time_end, :order_id])
end
order.rb

class Order < ActiveRecord::Base

     has_many :date_orders, :dependent => :destroy
     accepts_nested_attributes_for :date_orders, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end
类顺序:destroy
接受:date_orders的_嵌套的_属性,:reject_if=>lambda{a | a[:content].blank?},:allow_destroy=>true
结束
date_order.rb

class DateOrder < ActiveRecord::Base
    belongs_to :order
end
class-DateOrder
order/new.html.erb

<%= form_for(@order, :html => {:multipart => true}) do |f| %>
    ## SOME QUESTIONS ##
    <%= f.fields_for :date_orders do |builder| %>
        <%= builder.label :date %>
        <%= builder.date_field :order_date %>

        <%= builder.label :starting_time %>
        <%= builder.time_field :time_start %>

        <%= builder.label :ending_time %>
        <%= builder.time_field :time_end %>

    <% end %>
<% end %>
{:multipart=>true})do | f |%>
##一些问题##

生成更多订单\u日期

class OrdersController < ApplicationController
    def new
        @order = Order.new
        5.times { @order.date_orders.build }   # < === HERE ===
    end

    private

    def order_params
        params.require(:order).permit(:user_id, :purpose, 
        #                                 |-  === HERE ===
        date_orders_attributes: [:id, :content, :order_date, :time_start, :time_end, :order_id])
    end
end
class OrdersController
更新:
另外,将
内容
添加到您的强参数白名单中。

构建更多
订单日期

class OrdersController < ApplicationController
    def new
        @order = Order.new
        5.times { @order.date_orders.build }   # < === HERE ===
    end

    private

    def order_params
        params.require(:order).permit(:user_id, :purpose, 
        #                                 |-  === HERE ===
        date_orders_attributes: [:id, :content, :order_date, :time_start, :time_end, :order_id])
    end
end
class OrdersController
更新:
另外,将
content
添加到您的强参数白名单中。

这在视图中起作用,但不会创建任何日期顺序对象。这是因为您有一个验证要求
date\u order
具有
content
字段,但您没有在强参数中将其列入白名单。我也会更新我的答案,加上那张便条。非常感谢,乌兹别克。你解决了我的问题。现在,您对让用户创建和删除日期订单有何见解?比如说,你点击一个链接来添加一个新的,或者删除一个新的。因为“5.times”是任意的,用户应该确定他们的订单的日期数。你必须编写javascript来实现这一点。一个更简单的选择是使用gem。这在视图上起作用,但不会创建任何日期顺序对象。这是因为您有一个验证要求
date\u顺序
具有
content
字段,但您没有在强参数中将其列为白名单。我也会更新我的答案,加上那张便条。非常感谢,乌兹别克。你解决了我的问题。现在,您对让用户创建和删除日期订单有何见解?比如说,你点击一个链接来添加一个新的,或者删除一个新的。因为“5.times”是任意的,用户应该确定他们的订单的日期数。你必须编写javascript来实现这一点。一个更简单的选择是使用gem。