【问题标题】:Ruby on Rails: Properly creating a model instance that has relation to multiple modelsRuby on Rails:正确创建与多个模型相关的模型实例
【发布时间】:2011-08-11 05:14:44
【问题描述】:

假设我有一个独立的用户模型和服务模型。

我还有一个订单模型,用于保存用户为服务创建的订单。我想知道如何在 rails 中正确创建订单条目。

如果订单条目仅引用另一个模型,例如用户,我将使用以下方法创建它。

@order = current_user.orders.build(params[:order])
@order.save

现在如果订单涉及多个模型(用户和服务),我该怎么做?

假设 Order 模型具有 user_id 和 service_id 属性,并且所有模型对象都正确标记了 belongs_to 和 has_many 关系。

【问题讨论】:

    标签: ruby-on-rails ruby models


    【解决方案1】:
    @order = Order.new(params[:order])
    @order.user = current_user
    @order.service = @service
    @order.save
    

    @service 是您获取的一些服务

    【讨论】:

    • 根本不回答问题。
    【解决方案2】:

    我相信这种情况没有“神奇”的方法。但是逻辑是当用户和服务都存在时你创建一个订单,所以服务已经拥有 user_id 属性,你应该在 service.orders 上调用 build:

    @order = service.orders.build(params[:order].merge({ :user_id => service.user_id }))
    

    【讨论】:

    • 虽然在服务模型中使用 user_id 对我来说不是一个选项,但做一些类似于你的答案的事情确实很有意义。我更喜欢将 service_id 与订单参数合并,让用户构建订单。
    【解决方案3】:

    这就是我解决这个问题的方法,最好是第一种方法。

    current_user.orders.create!(params[:order].merge({ :service => @service }))
    
    or
    
    @service.orders.create!(params[:order].merge({ :user => current_user }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 2011-01-23
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多