2012-05-19 25 views
1

嗨,我很新的Rails,所以很抱歉,如果這是愚蠢的。我一直在尋找幾個小時。甚至不知道該問什麼。非常感謝您的幫助。Rails:一對多如何訪問衆多數據中的數據

我想要一個代碼和說明表。然後是另一個包含代碼的主表。加入這兩個表格,以便我可以根據代碼進行排序並提取說明。我似乎無法弄清楚代碼來描述。

這是代碼和說明遷移

create_table :sniffs do |t| 
    t.string "sniff_desc", :limit => 5 
    t.timestamps 
end  

這是主表遷移

create_table :lenders do |t| 
    t.integer "sniff_id" 
    t.timestamps 
end  

add_index("lenders", "sniff_id") 

這些模型

class Lender < ActiveRecord::Base 
    belongs_to :sniffs 
    scope :ranked, order("lenders.sniff_id ASC") 
end 

class Sniff < ActiveRecord::Base 
    has_many :lenders 
end 

的嗅探表

id sniff_desc 
1 Great 
2 OK 
3 Bad 

貸款表

id sniff_id 
1 2 
2 2 
3 3 

這是我想不通?如何爲特定的貸方實例獲取sniff_desc。例如,我在lender.id(2)上,我想知道它是sniff_desc「OK」。

所以,如果我軌控制檯

lender = Lender.find(2) 
    lender.sniffs 

我得到

=> nil 

我想我會得到嗅探第二個記錄。如果我鍵入此

Sniff.find(lender.sniff_id).sniff_desc 

我得到正確的答案

=> "OK" 

但代碼似乎打敗做一個一對多的關係的全部目的。

我不理解一對多的正確嗎?或者我該如何解決這個問題?

非常感謝您的幫助。我認爲這個問題太簡單了,所以我找不到其他人提問?!

回答

1

你幾乎說得對。唯一的問題是belongs_to使用單數,而不是複數。

你必須改變:

belongs_to :sniffs 

要:

belongs_to :sniff 

有了這個,你應該能夠做到:

lender = Lender.find(2) 
lender.sniff.sniff_desC#=> "OK" 
+0

呀謝謝你的sooo多米沙!是的,它的工作原理。我不會再犯這個錯誤。謝謝。 – haley