2010-08-08 62 views
0

我想按客戶端查看每個項目,但不確定如何使用Datamapper獲取此信息。我有我的關係設置是這樣的:Datamapper - 按項目查找每個客戶端

class Client 
    property :id, Serial 
    property :name, String 
    has n, :projects, :foreign_key => "company_id" 
end 

class Project 
    include DataMapper::Resource 
    property :id, Serial 
    property :title, String 
    belongs_to :company, "Client" 
    has n, :stages 
end 

我想輸出的列表,如:

客戶端1

  • 項目A
  • 項目B
  • 項目C

客戶端2

  • 項目d
  • 項目Ë

是什麼讓這一點的DataMapper的最佳途徑,將視圖模板是什麼樣子?

感謝

回答

1

的DataMapper還沒有foreign_key選項。這是:child_key

所以,你需要改變你的客戶端模型

class Client 
    property :id, Serial 
    property :name, String 
    has n, :projects, 'Project', :child_key => [:company_id] 
end 

後,您可以通過客戶端上的所有項目迭代

<% Client.all.each do |client| %> 
<%= client.name %> 
<ul> 
    <% client.projects.each do |project| %> 
    <li><%= project.title %></li> 
    <% end %> 
</ul> 
<% end %> 
+0

到目前爲止,感謝您的幫助,在數據庫中我的Projects表格現在有一個company_id,它是正確的。然而,視圖只是輸出client.projects.each中的客戶端名稱和內容,我可以通過任何方式進行調試? – Tom 2010-08-12 20:49:21

+0

你能看到哪個SQL命令試圖在日誌中做DataMapper嗎? – shingara 2010-08-13 07:04:52

+0

是的,我得到了:〜(0.000582)SELECT「id」,「name」,「client_slug」FROM「clients」ORDER BY「id」 〜(0.000094)SELECT「id」,「title」,「project_id」 FROM「projects」WHERE「project_id」IN(2,14,15,19,20,24,28,42,43)ORDER BY「id」「 – Tom 2010-08-15 20:03:03

1
# Find all clients (this should go in a controller of some kind) 
@clients = Client.all # Maybe you want to order them here too 

查看...

<% @clients.each do |client| %> 
<%= client.name %> 
<ul> 
    <% client.projects.each do |project| %> 
    <li><%= project.title %></li> 
    <% end %> 
</ul> 
<% end %> 
+0

這給了我一個「條件:foreign_key不映射到屬性或關係在MyApp :: Project' 我不需要在某處執行Projects.all()嗎? – Tom 2010-08-09 06:30:07