2010-08-08 35 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