2011-04-22 105 views
8

假設我有一個獨立的用戶模型和服務模型。Ruby on Rails:正確地創建與多個模型有關的模型實例

我也有一個訂單模型,它包含用戶爲服務創建的訂單。我想知道如何在軌道中正確創建訂單條目。

這裏是我將如何創建訂單條目,如果它只涉及一個其他模型,說用戶。

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

現在如果訂單涉及多個模型(用戶和服務),現在該怎麼辦?

假設Order模型具有user_id和service_id屬性,並且所有模型對象都使用belongs_to和has_many關係進行了正確標記。

回答

2

這是如何我會解決這個問題,最好是第一種方式。

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

or 

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

哪裏@service是一些您獲取服務

+0

根本不回答問題。 – 2011-04-24 04:19:09

+0

哦,我明白了,對不起。我現在更新我的答案 – fl00r 2011-04-24 17:18:51

0

我相信有這種情況下,沒有「神奇」的方法。但邏輯是,你創建一個訂單時,用戶和服務alredy存在,所以服務已經擁有user_ID的屬性,你或許應該叫建立在service.orders:

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

儘管在服務模型中使用user_id對我來說不是一種選擇,但它可以做類似於答案的事情。我更喜歡將service_id與order params合併,並讓用戶構建訂單。 – 2011-04-24 13:43:37