【问题标题】:How to create two objects inside one create controller method in Rails?如何在 Rails 的一个创建控制器方法中创建两个对象?
【发布时间】:2017-04-19 20:14:05
【问题描述】:

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

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

sale
  amount (integer)
  organization_id (uuid)

organization
  name (string)

sale belongs_to organization
organization has_many sales

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”方式提交多个对象?

【问题讨论】:

  • 一篇旧文章,但以下内容应该有所帮助:webuild.envato.com/blog/… 您实际上并不需要 Virtus,但该文章将为您提供总结验证等的要点。

标签: ruby-on-rails


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多