2011-04-07 55 views
1

我有一個具有billing_id的用戶模型。我有訂單模型,用支付網關運行交易,支付網關返回我想要保存到用戶模型的billing_id列中的帳單ID。我想我已經把MVC架構的基礎知識混淆了起來。Rails從另一個模型的控制器更新一個模型中的數據

我感覺UsersController和OrdersController更新了它們各自表的數據。這是否意味着如果我從OrdersController返回了某些帳單ID之類的東西,那麼沒有其他方法可以將該帳單ID保存到用戶模型的billing_id列中?如果這是非常基本的,謝謝並抱歉。 :)

此外,我認爲一個可能的解決方案可能會通過ApplicationsController傳遞到ApplicationsController返回值保存到用戶表。這可能嗎?

回答

1

您的用戶訂單表應該有一個user_id的實例,因爲用戶可以有多個訂單。然後

rails g migration add_user_id_to_orders order_id:integer 
rake db:migrate 

您的模型看起來像:

您可以通過創建一個遷移做到這一點

class User < ActiveRecord::Base 
    has_many :orders 
end 

class Order < ActiveRecord::Base 
    belongs_to :user 
end 

需要兩個(ORDER_ID)之間的聯繫,否則他們就沒有知識彼此的。這被稱爲外鍵。

當一切都設置了這種方式,您可以通過執行獲得用戶:

User.find(1).orders 

而且你可以通過執行找到一個訂單的用戶信息:

Orders.find(1).user 

我希望這幫助。

編輯:

Orders.find(ORDER_ID).user.update_attributes(:billing_id => BILLING_ID) 
+0

感謝Gazler。我已經這樣設置它。目前,我關心的是如何才能夠獲得新訂單創建的返回值並將其保存到OrdersController的User表中。感謝您的輸入 – railslearner 2011-04-07 20:54:14

+0

您爲什麼需要將此值保存到用戶?它與訂單沒有關聯嗎?你能澄清一下嗎? – Gazler 2011-04-07 20:55:49

+0

是的。當信用卡號被保存在支付網關數據庫中時,billingID被返回。我希望在用戶表中有billingID列,並將其保存在那裏而不是訂單表中,因爲billingID僅在保存新信用卡時纔會返回。 – railslearner 2011-04-07 21:00:20

相關問題