2016-02-09 4 views
0

Я нахожусь в процессе создания своего первого приложения для рельсов и нахожусь в беде. Это мой контекст:Как создать несколько моделей с одного контроллера

Я создал контроллер api/v1/orders, который принимает сообщение JSON от третьего лица, содержащего заказ с несколькими позициями. В этом контроллере я создаю порядок и несколько позиций за один раз, используя accepts_nested_attributes_for :line_items, allow_destroy: true.

Теперь, после создания заказа и позиций, я хочу создать доставку. Моя первоначальная мысль заключается в том, чтобы создать метод в модели Order, потому что все отправления для определенного заказа должны быть созданы одновременно после того, как заказ будет вставлен. Как мне получить доступ к атрибутам заказа в модели?

В моих контроллерах это мой заказ # создать

   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

Использование self. перед объявлением метода делает его методом класса. Вам нужен метод экземпляра, поскольку вы вызываете assign_shipments на экземпляр Order. Затем в методе используйте self, чтобы обратиться к самому экземпляру.

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

Большое спасибо мат. Это именно то, что я искал. Похоже, я могу переместить еще кое-что из моего контроллера в мои модели: D cheers! – stoerebink

Смежные вопросы