2017-04-27 4 views
1

Est-il possible d'avoir 2 .each sur la même vue. Avec eux faire des recherches différentes? Par exemple, si je veux afficher tous les messages publiés par un utilisateur spécifique. J'aurais l'action suivante dans mon contrôleur utilisateurs:Rails: Est-il possible d'avoir 2 boucles différentes sur la même vue?

def show 
    @user = User.find(params[:id]) 
    @posts = @user.posts 
end 

Puis dans la vue je l'aurais:

- @posts.each do |post| 
    =post.title 

Alors Si je voulais afficher les messages par d'autres utilisateurs sur le même point de vue. En utilisant le ci-dessus ne fonctionnera pas comme sa seule recherche pour les messages des utilisateurs spécifiques. Puis-je créer une nouvelle action? Quelque chose comme ce qui suit:

def showAll 
    @user = User.find(params[:id]) 
    @posts = Post.where(:attribute => value).order("created_at DESC") 
end 

Puis retour dans la page de vue j'aurais une autre each.do avec celui-ci étant l'action showAll comme:

- @posts.each do |post| 
    =post.title 

Comment puis-je atteindre cet objectif? Est-ce la bonne façon d'utiliser les actions?

+0

'@posts = (@user == current_user)? @ user.posts: Post.where (: attribut => valeur) .order ("created_at DESC") 'essayez ceci dans votre show show –

+0

Il y a probablement un type de connexion pour lequel les utilisateurs pour lesquels vous voulez montrer des données. Au lieu de trouver des utilisateurs individuels ligne par ligne, je trouverais d'abord les utilisateurs par leur lien commun (par exemple User.where (quelque chose: vrai). – bkunzi01

Répondre

1

Oui, vous pouvez le faire dans la même action se

def show 
    @posts = current_user.posts 
    @other_posts = Post.where(:attribute => value).order("created_at DESC") 
    # OR 
    # @other_posts = Post.where.not(id: @posts).order("created_at DESC") 
end 

Et vous pouvez boucler sur eux en vue

%h2 Your posts 
- @posts.each do |post| 
    = post.title 

%h2 Posts from other users 
- @other_posts.each do |post| 
    = post.title