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