如何从一个控制器创建多个模型

时间:2016-02-09 18:31:29

标签: ruby-on-rails ruby model-view-controller

我正在构建我的第一个rails应用程序,但遇到了一些麻烦。这是我的背景:

我创建了一个api / v1 / orders控制器,它接受来自包含多个订单项订单的第三方的JSON消息。在此控制器中,我使用accepts_nested_attributes_for :line_items, allow_destroy: true一次性创建订单和多个订单项。

现在,在创建我要创建货件的订单和订单项后。我最初的想法是在订单模型中创建一个方法,因为在插入订单后应该同时创建特定订单的所有货件。现在我如何访问模型中的订单属性?

在我的控制器中,这是我的订单#create

                order = Order.new(
                  shopify_order_id: params[:id],
                  shopify_created_at: params[:created_at],
                  shopify_order_name: params[:name],
                  #etc etc
                  line_items_attributes: create_line_items(params[:line_items])
                )

order.save之后,我想致电order.assign_shipments。如何访问我在订单控制器中设置的属性?

在我的订单模型中,我想做类似的事情:

    def self.assign_shipments
      order.line_items.each do |line_item| 
      #   check line item params
      #   create_shipments based on line item params
      end
    end

但是,我不知道如何访问订单的属性(订单项)?这些甚至可以在模型中使用,还是仅在我的订单控制器实例中可用(因此我应该在订单控制器中创建货件)?

1 个答案:

答案 0 :(得分:1)

在方法声明前面使用self.使其成为Class方法。您需要一个实例方法,因为您在Order实例上调用了assign_shipments。然后在方法中使用self来引用实例本身。

def assign_shipments
    self.line_items.each do |line_item|
        #   check line item params
        #   create_shipments based on line item params
    end
end