each dans un helper

Par Amstramgram, il y a 10 ans


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.

4 réponses

Grafikart, il y a 10 ans

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

Amstramgram, il y a 10 ans

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 ?

Grafikart, il y a 10 ans

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

Amstramgram, il y a 10 ans

Mmmmh ok cool Merci.