7
votes

Rails 3 Trouver tous les enregistrements associés has_many: à travers

Je voudrais énumérer tous les messages liés à une catégorie et de classe spécifiques.

J'ai: xxx

et je veux faire quelque chose comme ça xxx

C'est en effet une tâche très simple, mais je ne sais pas ce que je devrais rechercher (mots-clés).

C'est le même problème comme Ce , mais dans les rails.

EDIT : J'ai ajouté plus de détails à la question. Cela fonctionne, mais seulement si j'ai les deux paramètres spécifiés. Sorcière n'est pas toujours le cas - je ne sais pas quels paramètres seraient spécifiés. xxx


0 commentaires

4 Réponses :


4
votes
Category.find(params[:category_id]).posts
Also take a look at the guides:
Guides for Rails 2.35
Guides for Rails 3.0

4 commentaires

Cela fonctionne, merci. Mais que se passe-t-il si j'avais une association de plus à plusieurs (disons de classe) à ce poste et je veux trouver les deux par catégorie et par classe? Quelque chose comme post.where (["catégorie.id =? And classroom.id =?", Parames [: catégorie_id], paramètres [: classroom_id]]]


Que diriez-vous: POST.Où (["catégorie_id =?", Parames [: catégorie_id]). Où (["classroom_id =?", Parames [: classroom_id]]]


@chap je n'ai pas ces champs dans la table postale. C'est pourquoi je demande. Veuillez lire la question.


Votre réponse ne fera qu'aider à trouver un poste qui appartient à une certaine catégorie et ne le filtrera pas également par une classe.



0
votes

sonne comme si vous avez besoin d'une instruction IF.

if params[:category_id] && params[:classroom_id]
  Post.joins(:categories, :classrooms).where("classrooms.id" => params[:classroom_id], "categories.id" => params[:category_id]])
elsif params[:category_id]
  Category.find(params[:category_id]).posts
else
  Classroom.find(params[:classroom_id]).posts
end


0 commentaires

2
votes

Je pense que cela devrait fonctionner:

SELECT 
    p.*
FROM
    posts AS p
        INNER JOIN
    category_posts AS cap ON cap.id = p.category_posts_id
        INNER JOIN
    classroom_posts AS clp ON clpid = p.classroom_posts_id
WHERE
    cap.category_id = '1' AND clp.classroom_id = '1'
;


0 commentaires

4
votes

Voici ce que je ferais dans les rails 3:

dans post.rb code>: p> xxx pré>

Je ne joint pas Salle de classe code> ou catégorie code> car il fait plus de travail pour le SGMS et ce n'est pas nécessaire. P>

MAINTENANT, vous pouvez faire: P>

Post.in_category(params[:category_id]).in_classroom(params[:classroom_id])


0 commentaires