Ce n'est peut-être pas la meilleure solution dans la plupart des cas, mais je veux une table avec des données de 3 tables.Besoin de données d'un grand nombre: beaucoup rejoignent une vue Rails
class Media < ActiveRecord::Base
belongs_to :user
belongs_to :type
has_many :ratings
end
class User < ActiveRecord::Base
has_many :medias
has_many :ratings
end
class Rating < ActiveRecord::Base
belongs_to :user
belongs_to :media
end
Cest la vue que je veux
<table>
<tr>
<th>Name</th>
<th>Comment</th>
<th>Creator</th>
<th>Type</th>
<% for user in @users %>
<th><%=h user.login %></th>
<% end %>
</tr>
<% for media in @medias %>
<tr>
<td><%=h media.name %></td>
<td><%=h media.comment %></td>
<td><%=h media.user.login %></td>
<td><%=h media.type.name %></td>
<% for user in @users %>
<td><%=h GET_RATING (media, user) %></td>
<% end %>%>
</tr>
<% end %>
</table>
Basiquement je veux une nouvelle ligne pour chaque utilisateurs d'évaluation pour chaque média
Ce que je veux un tableau qui ressemble à ce que:
media.name media.comment ... rating(media, user).rating
Je pense qu'il serait préférable d'utiliser une jointure dans le contrôleur avec les méthodes de recherche de média mais je ne sais pas h ow exactement, une solution possible plus large pourrait être une méthode d'assistance qui prend en charge les médias et l'utilisateur en tant que paramètres.
Selon vous, quelle est la meilleure solution pour cela?
merci beaucoup, mais je ne l'ai pas terminé complet: <% media.users.each do | rater | %> <% rater.ratings.each do | Évaluation | %> <% = h rating.rating%> <% end %> <% end %> qui est ce que j'ai en ce moment, le problème est quand un utilisateur n'a pas donné une note, il est pas dans la liste media.users si Je reçois une table avec un nombre de td différent par ligne. –
non, cela ne fonctionne pas. avec media.users J'obtiens tous les utilisateurs qui ont donné une note pour ce film. Avec media.users.ratings, j'obtiens toutes les évaluations que l'utilisateur a données mais pas seulement pour ce média. Donc, si je donne une note en tant qu'utilisateur A pour le film 1 et une autre note pour le film 2 et puis je reçois pour le film 1 à la fois les votes et aussi pour le film 2 les deux votes. Par conséquent, la solution n'est pas valide ou seulement partielle. –
C'est la bonne technique. Vous devez remplir l'association. – nitecoder