2011-01-21 50 views
1

我有一個簡單的問題,但找到解決方案並不那麼簡單。訪問一個視圖內的其他模型值,簡單但複雜?

我有兩個型號,人員,技能
人有許多技能
技能屬於人

在數據庫中,Person表有一個skill_id也更是把ID從技能表作爲外鍵。

在視圖中,我想按名稱列出該人員的技能,我可以通過ID獲得他們的技能,但是如何從技能表中檢索名稱字段。

Person.html(圖)

<p>Current skills for: <b><%= "#{ @person.name }" -%></b></p> 

<% @people.each do |p| %> 
    <p>Age: <%= "#{p.age}" %></p> 
    <p><%= "#{p.start_date}" %></p> 
    <p><%= "#{p.skill_id}" %></p>  
<% end %> 
+0

請用4個空格縮進,或通過使用\`直列正確格式的代碼。 – 2011-01-21 11:07:38

+0

技能應該承擔user_id:這是你設置的belongs_to – apneadiving 2011-01-21 11:09:28

+0

`人has_many:skills`意味着Person是該關聯中的Parent。那麼如何在Person模型中將`skill_id`設置爲外鍵。 Rather Skill模型應該將Person作爲參考。其實這是一個多對多的場景。一項特殊技能可以被許多人共享。所以你可能會重新考慮數據庫結構。 :)您可以嘗試使用連接模型來表示該模型,如下所示: – Rohit 2011-01-21 12:03:21

回答

2

你說你有has_many :skills。但是然後你繼續說,你在persons表上有skill_id,這是不一致的。你想要什麼?

你想讓一個人擁有一個特定的技能,在這種情況下,你現在擁有的數據庫方式是好的,但模型明智不是。在這種情況下Person模型就必須有belongs_to :skillSkill模型就必須有has_many :people

其他可能的辦法解決,我可以認爲你會希望它是一個人has_and_belongs_to_many:skills和技能has_and_belongs_to_many :people。這將使許多人有很多技能,這是我真正認爲你想要的。然後在視圖中,你可以這樣做:

<% people.each do |p| %> 
    <h2><%= p.name %>'s skills</h2> 
    <% p.skills.each do |skill| %> 
    <%= skill.name %> 
    <% end %> 
<% end %> 

那麼這是哪一個呢?你的問題說了一件事,然後是極端相反的事情,這很令人困惑。我希望這個答案能幫助你做出正確的選擇。

1
<% @people.each do |p| %> 
    <% p.skills.each do |s| %> 
    <%= s.name %> 
    <% end %> 
<% end %> 
0

您當前的模型設計不支持的要求,即

技能屬於多個人

人有許多技能

這是很好的情況下,對於許多到多種協會。你已經引入了一個橋表來保存關聯。

class Person 
    has_many :person_skills 
    has_many :skills, :through => :person_skills 
end 

class Skill 
    has_many :person_skills 
    has_many :person, :through => :person_skills 
end 

# person_skills table with person_id and skill_id columns 
class PersonSkill 
    belongs_to :person 
    belongs_to :skill 
end 

要通過名字得到一個人的技能:

@person.skills.find_all_by_name("foo") 
@person.skills.all(:conditions => ["name LIKE ?", "foo%"]) 
相關問題