2011-04-07 57 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

相关问题