如何在Rails中的一个创建控制器方法中创建两个对象?

时间:2017-04-19 20:14:05

标签: ruby-on-rails

我有一个表单,我需要创建两个对象:saleorganization。这发生在sales_controller内。

为简洁起见,模型及其属性为:

sale
  amount (integer)
  organization_id (uuid)

organization
  name (string)

sale belongs_to organization
organization has_many sales

Sales Form

这就是sales new的样子。它有一个销售输入,用户将输入,它还有一个输入组织名称,用户将输入。提交后,用户将创建一个新的销售(并创建一个与该销售相关联的新组织)。

我想弄清楚sales_controller中create方法的最佳做法是什么。

  def create
    @sale = Sale.new(sale_params) #assume sale_params permits organization_id and amount
    @organization = Organization.create(params[:name])
    #@sale.organization_id = @organization.id
    if @sale.save
      render json: @sale
    else
      render json: sale, status: :unprocessable_entity
    end
  end

@organization = Organization.create(...)感觉不对。有没有办法做多个对象提交" Rails" -way?

1 个答案:

答案 0 :(得分:1)

由于您可能已经在以前的销售中创建了一个组织,因此您可以使用:

@organization = Organization.find_or_create_by(name: params[:name])

然后通过关联sale.organization_id继续。您还需要对Organization.name具有唯一性约束。