【发布时间】:2012-10-18 18:51:25
【问题描述】:
首先,一些背景。
我的应用模型是这样的:
User has_many :subscriptions; has_many :courses, :through => :subscriptions
Subscription belongs_to :course, :user
Course has_many :subscriptions; has_many :users, :through => :subscriptions
订阅是一个连接表,用于存储诸如状态(:active、:inactive、:failed、:passed、:unpaid)之类的信息,并用作连接课程所带来的所有信息的连接器(例如作为 Grade 模型(尚未添加)、Payment 模型(正在进行中)等)。
我想添加付款模型来存储订阅的付款历史记录。每次付款可以用于一个或多个订阅。到目前为止,我已经尝试了 Payment has_many :subscriptions,但是 我在控制器逻辑方面遇到了问题,我在想也许有更好的方法来关联“来自用户的付款”的模型订阅课程。”
从技术上讲,在支付展示操作中,我需要来自每个模型(course.name、支付用户的 user_id、payment.amount,所有这些都与订阅相关联)和支付中的信息。创建操作,我需要设置订阅的状态(我可以这样做)。
如果这是关联各种模型的一种合乎逻辑/有效的方式,我如何以最少的数据库调用在支付展示操作中访问所需的信息(来自每个模型课程、用户、支付和订阅的一些信息)?我正在使用Rails 3.2/Ruby 1.9 并希望坚持使用 ActiveRecord/ARel 而不是直接的 sql 语句。我也愿意接受“你做错了”的答案。如果更改关联可以更有效地从控制器访问表,我也愿意。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 database-design activerecord controller