嵌套时的Rails模型关联 - 混淆

时间:2016-10-10 12:18:05

标签: ruby-on-rails ruby activerecord associations

也许我接近这一切都错了,我有以下模型设置:

User模型有很多QuestionsQuestion belongs_to a User

这意味着我可以轻松地执行:u = User.last.questions并查看与上次添加的用户相关的所有问题。

在此之后,我有Payment模型属于QuestionQuestion has_one payment意味着我可以轻松地u = User.last.questions.last.payment,从最后添加的用户最后添加的问题中获取付款详细信息(也许是daft示例!)。

现在让我困惑的是

我有一个名为PaymentOption的模型,用于填充下拉列表,价格不同,PaymentOption belongs_to a PaymentPayment has_one {{ 1}}

这一切都正常,但我找到付款方式详情的唯一方法,例如金额,就是做这样的事情:

PaymentOption

理想情况下,我会这样做: payment_amount = PaymentOption.find(User.last.questions.last.payment.payment_option_id).amount

通过我的方式进行,它可以做两个单独的查询,一个用于获取付款选项ID,另一个用于查找与该特定付款选项相关的详细信息。当然有更好的方法来解决这个问题吗?

提前致谢

编辑1

为了澄清我的回答,我已经包含了Payments和PaymentOptions的架构

amount = User.last.questions.last.payment.payment_option.amount

1 个答案:

答案 0 :(得分:1)

我认为这是你的问题:

  

我有一个名为PaymentOption的模型,用于填充drop   下拉列表,对于不同的价格,PaymentOption属于a   付款和付款has_one PaymentOption

您说您已设置Payment has_one PaymentOptionPaymentOption belongs_to Payment。但是在最后描述的模式Payment中有一个payment_option_id

在这种情况下,Payment属于PaymenteOption,而不是相反。请参阅Rails指南中的this exampleAccountsupplier_id,因此Supplier有一个AccountAccount belongs_to供应商。

你的模特应该是这样的:

class Payment < ActiveRecord::Base

  belongs_to :payment_option

end

class PaymentOption < ActiveRecord::Base
  has_one :payment # Or even has_many :payments
end