繁体   English   中英

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

[英]Rails Model Associations when nesting - Confusion

也许我的做法是错误的,我有以下模型设置:

User模型有很多Questions ,一个Question属于一个User

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

在此之后,我有一个属于QuestionPayment模型。 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 PaymentOptionPaymentOption Payment 但在最后描述的模式中Payment有一个payment_option_id

在这种情况下, Payment属于PaymenteOption而不是相反。 请参阅 Rails 指南中的此示例 Accountsupplier_id Supplier Account belongs_to因此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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM