2010-08-08 3 views
0

Je voudrais voir chaque projet par client, mais je ne sais pas comment utiliser Datamapper pour obtenir cette information. J'ai comme ça ma configuration des relations:Datamapper - Trouver chaque client par projet

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 

je voudrais sortir une liste comme:

client 1

  • Projet A
  • Projet B
  • Projet C

Client 2

  • Projet D
  • Projet E

Quelle est la meilleure façon d'obtenir ce sur DataMapper et à quoi ressemblerait le modèle de vue comme?

Merci

Répondre

1

DataMapper n'a pas l'option foreign_key. Il est :child_key

Vous avez donc besoin de changer votre modèle client

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

Une fois que vous pouvez itérer sur tous les projets par le client

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

Merci pour votre aide jusqu'à présent, Dans la base de données, ma table de projets a maintenant un ID_entreprise qui est correct. Cependant, view ne sort que le nom du client et rien à l'intérieur de client.projects.each, de toute façon je peux déboguer? – Tom

+0

Pouvez-vous voir quelle commande SQL essaie de faire DataMapper dans le journal? – shingara

+0

Oui, j'ai: ~ (0.000582) SELECT "id", "nom", "client_slug" DE "clients" ORDER BY "id" ~ (0.000094) SELECT "id", "titre", "project_id" FROM "projects" OERE "project_id" IN (2, 14, 15, 19, 20, 24, 28, 42, 43) ORDER BY "id" " – Tom

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

Voir ...

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

Cela me donne une « condition: foreign_key ne correspond pas à une propriété ou relation dans MyApp :: Project ' N'ai-je pas besoin de faire Projects.all() quelque part? – Tom

Questions connexes