Bonjour,
Je débute encore en ruby on rails, et j'ai un probleme, je ne comprends pas mon probleme mais je sais pourquoi cela fais ca.
Alors voila dans ma vue, j'ai:
- Task.where(["assigned_to = ? and is_closed = ?", current_user.id, 0]).each do |task|
- Project.where(:id => task.project_id).each do |project|
= render 'projects/project', :project => project
et ce que j'essai de faire c'est de mettre les deux premieres ligne dans une fonction dans un fichier helper.
Je suis arrivé a faire ca :
- projects_current_user(current_user.id).each do |project|
= render 'projects/project', :project => project
def projects_current_user(current_user)
tasks = Task.where(["assigned_to = ? and is_closed = ?", current_user.id, 0])
tasks.each do |task|
return Project.where(:id => task.project_id)
end
end
ce qui fonctionne plutôt bien si l'on ne veux u'une seul valeur. J'ai donc essayer de faire un tableau :
def projects_current_user(current_user)
projects = Array.new
tasks = Task.where(["assigned_to = ? and is_closed = ?", current_user.id, 0])
tasks.each do |task|
projects << Project.where(:id => task.project_id)
end
return projects.uniq
end
mais cela ne fonctionne pas et je ne sais pas quoi faire de plus.
Si vous avez un peu de temps je voudrais bien savoir comment faire cette petite fonction.
Merci,
des bisous.
Le code que tu montre ici a plus sa place dans un model. Après je ne comprend pas ta logique, tu va faire des tonnes de requetes si tu fais comme ça.
def projects_current_user(current_user)
# On récupre la liste des projets [id1, id2..]
project_ids = Task.where(["assigned_to = ? and is_closed = ?", current_user.id, 0]).pluck(:project_id)
return Project.where(:id => project_ids)
end
La méthode pluck permet de ne charger qu'un champs dans un tableau
Dans l'état actuel, c'est un peu le mode "je test des trucs et je vois si ca fonctionne". Pratique ce pluck. Est ce que .collect c'est la même chose ?
collect
se fait côté ruby après que ta requête soit faite
pluck
se fait côté base de données du coup il ne va sélectionner que le champs demandé lors de la requête