Ruby on rails RubyonRails“表单”插入到关联表

Ruby on rails RubyonRails“表单”插入到关联表,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在构建一个包含2个表的订单管理系统:顾客:订购。我可以销毁、显示,甚至可能编辑。但我只能为客户创建,不能为订单创建。这是我目前掌握的代码: class Order < ActiveRecord::Base belongs_to :customer end class Customer < ActiveRecord::Base has_many :orders end 创建订单 要在同一请求中创建客户和订单,您可以使用: 这将允许您通过以下方式创建客户: Order.c

我正在构建一个包含2个表的订单管理系统:顾客:订购。我可以销毁、显示,甚至可能编辑。但我只能为客户创建,不能为订单创建。这是我目前掌握的代码:

class Order < ActiveRecord::Base
  belongs_to :customer
end

class Customer < ActiveRecord::Base
  has_many :orders
end
创建订单
要在同一请求中创建客户和订单,您可以使用:

这将允许您通过以下方式创建客户:

Order.create(customer_attributes: { voornaam: 'Max' })
在表格中,您可以添加如下输入:

<%= form_for(:order) do |f| %> 
  <%= f.fields_for :customer do |cf| %>
    <%= cf.text_field :voornaam %>
  <% end %>
<% end %>
然而,从用户体验的角度来看,最好将其分为单独的步骤


您可能想考虑将订单关联到用户创建帐户并签入。

< P>在相同的请求中创建客户和订单:

这将允许您通过以下方式创建客户:

Order.create(customer_attributes: { voornaam: 'Max' })
在表格中,您可以添加如下输入:

<%= form_for(:order) do |f| %> 
  <%= f.fields_for :customer do |cf| %>
    <%= cf.text_field :voornaam %>
  <% end %>
<% end %>
然而,从用户体验的角度来看,最好将其分为单独的步骤


您可能需要考虑将订单关联到用户创建帐户并签入的记录。

< P>控制器中的这行可能存在问题:

orders = Order.where(params(order_params))
@customer.orders << orders

控制器中的此行可能有问题:

orders = Order.where(params(order_params))
@customer.orders << orders


那么,您试图同时创建客户和订单?为什么呢?只是想了解你在网站上的工作流程。通常客户已经存在,我们会向客户添加订单。欢迎使用stackoverflow。ruby-on-rails-4和ruby-on-rails-3标记用于特定于特定版本的rails的问题。不要两者都用。@MichaelChaney是的,这是真的!然而,我只是想知道这是否可行。你的方式是另一种或可能是唯一的选择。但是,如果我能按我尝试的方式完成,那么我的项目就差不多完成了。@max Ok,下一次可以了。您是要为客户创建一个订单还是多个订单?您使用复数形式,但形式看起来只有一个订单?那么,您试图同时创建客户和订单?为什么呢?只是想了解你在网站上的工作流程。通常客户已经存在,我们会向客户添加订单。欢迎使用stackoverflow。ruby-on-rails-4和ruby-on-rails-3标记用于特定于特定版本的rails的问题。不要两者都用。@MichaelChaney是的,这是真的!然而,我只是想知道这是否可行。你的方式是另一种或可能是唯一的选择。但是,如果我能按我尝试的方式完成,那么我的项目就差不多完成了。@max Ok,下一次可以了。您是要为客户创建一个订单还是多个订单?你用复数,但形式看起来只有一个顺序?而且我也不明白为什么你会用荷兰语属性名来表示你的模型。用英语翻译标签,我也不明白你为什么要用荷兰语来命名你的模型。使用英语翻译标签。只要他将订单附加到@customer.orders后再次保存,他的代码就是正确的。不过,他还有比这更大的问题,当基本概念不正确时,深入研究其中各个部分的细节就没有什么意义了。我理解你的意思。但我也明白,他成功地创造了一个客户,而不是一个订单。所以我告诉他我在他选择创建订单的方式中看到了什么样的问题。我经常试图只回答我所知道的,即使这只是一个更大问题的一部分。如果他想将现有订单链接到客户,他的代码是正确的。但是表单只发送新字段。只要在将订单附加到@customer.orders后再次保存,他的代码就是正确的。不过,他还有比这更大的问题,当基本概念不正确时,深入研究其中各个部分的细节就没有什么意义了。我理解你的意思。但我也明白,他成功地创造了一个客户,而不是一个订单。所以我告诉他我在他选择创建订单的方式中看到了什么样的问题。我经常试图只回答我所知道的,即使这只是一个更大问题的一部分。如果他想将现有订单链接到客户,他的代码是正确的。但是表单只发送新字段。
orders = Order.where(params(order_params))
@customer.orders << orders
orders = @customer.orders.create(order_params)