Rails从另一个模型的控制器更新一个模型中的数据

时间:2011-04-07 20:43:24

标签: ruby-on-rails controllers rails-models

我有一个具有billing_id的用户模型。我有一个Order模型,它使用支付网关运行交易,该支付网关返回我想保存在User模型的billing_id列中的账单ID。我想我正在搞清楚MVC架构的基础知识。

我的印象是UsersController和OrdersController更新了各自表的数据。这是否意味着如果我从OrdersController返回了某些内容,例如结算ID,那么没有其他方法可以将该结算ID保存到用户模型的billing_id列中?谢谢,对不起,如果这是非常简陋的。 :)

另外,我认为一个可能的解决方案可能是以某种方式通过ApplicationsController将返回值传递给UsersController以保存到User表中。这可能吗?

1 个答案:

答案 0 :(得分: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)