[英]Rails Model Associations when nesting - Confusion
也许我的做法是错误的,我有以下模型设置:
User
模型有很多Questions
,一个Question
属于一个User
这意味着我可以轻松做到: u = User.last.questions
并查看与上次添加的用户相关的所有问题。
在此之后,我有一个属于Question
的Payment
模型。 Question
has_one payment
意味着我可以轻松地做u = User.last.questions.last.payment
,从最后添加的用户最后添加的问题中获取付款详细信息(也许是愚蠢的例子!)。
现在让我困惑的一点
我有一个名为PaymentOption
的模型,用于填充下拉列表,对于不同的价格, PaymentOption
属于一个Payment
和一个Payment
has_one PaymentOption
这一切正常,但我要找出付款选项的详细信息(例如金额)的唯一方法是执行以下操作:
payment_amount = PaymentOption.find(User.last.questions.last.payment.payment_option_id).amount
理想情况下,我会这样做: amount = User.last.questions.last.payment.payment_option.amount
按照我的方式进行操作,就像进行两个单独的查询一样好,一个是获取付款选项 ID,另一个是查找与该特定付款选项相关的详细信息。 当然有更好的方法来解决这个问题吗?
提前致谢
编辑 1
为了澄清我的答案,我已经包含了 Payments 和 PaymentOptions 的架构
create_table "payment_options", force: :cascade do |t|
t.integer "amount"
t.text "description"
t.string "title"
t.boolean "user_accessible", default: true
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "payments", force: :cascade do |t|
t.string "email"
t.string "token"
t.integer "question_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "payment_option_id"
end
add_index "payments", ["payment_option_id"], name: "index_payments_on_payment_option_id"
add_index "payments", ["question_id"], name: "index_payments_on_question_id"
我认为这是你的问题:
我有一个名为 PaymentOption 的模型,用于填充下拉列表,对于不同的价格, PaymentOption 属于一个 Payment 和一个 Payment has_one PaymentOption
你说你已经设置了Payment
has_one PaymentOption
和PaymentOption
Payment
。 但在最后描述的模式中Payment
有一个payment_option_id
。
在这种情况下, Payment
属于PaymenteOption
而不是相反。 请参阅 Rails 指南中的此示例。 Account
有supplier_id
Supplier
Account belongs_to
因此Supplier
有一个Account
, Account belongs_to
供应商。
你的模型应该是这样的:
class Payment < ActiveRecord::Base
belongs_to :payment_option
end
class PaymentOption < ActiveRecord::Base
has_one :payment # Or even has_many :payments
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.