也許我接近這一切都錯了,我有以下型號設置:Rails的模型關聯 - 混亂
的User
模型有很多Questions
,一個Question
belongs_to的一個User
這意味着我可以很容易地請執行:u = User.last.questions
並查看與最後添加的用戶相關的所有問題。
繼此之後,我有一個Payment
模型,屬於Question
。 A Question
has_one payment
這意味着我可以很容易地做u = User.last.questions.last.payment
,從最後添加的用戶最後添加的問題中獲取付款詳細信息(可能是daft示例!)。
現在是困惑我
位我有一個名爲PaymentOption
這是用來填充下拉列表模式,針對不同的價格,PaymentOption
belongs_to的一個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
爲了澄清我的回答,我已經包括了付款模式和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"
你確定量'payment_option'的屬性,而不是'payment'?你可以顯示模型文件的付款? –
我已經更新了我的答案並提供了更多信息 - 謝謝 – Torrm
我認爲您的模式和關聯不是平面錯誤或效率低下。在各自的模型文件中'payment'和'payment_option'之間的關聯是什麼? –