Je voudrais lister tous les postes connectés à une catégorie spécifique et à une salle de classe.Rails 3 trouver tous les articles associés has_many: through
Je:
class Post < ActiveRecord::Base
has_many :category_posts
has_many :categories, :through => :category_posts
has_many :classroom_posts
has_many :classrooms, :through => :classroom_posts
end
class Category < ActiveRecord::Base
has_many :category_posts
has_many :posts, :through => :category_posts
end
class CategoryPost < ActiveRecord::Base
belongs_to :category
belongs_to :post
end
class Classroom < ActiveRecord::Base
has_many :classroom_posts
has_many :posts, :through => :classroom_posts
end
class ClassroomPost < ActiveRecord::Base
belongs_to :classroom
belongs_to :post
end
Je veux faire quelque chose comme ça
Post.where(["category.id = ? AND classroom.id = ?", params[:category_id], params[:classroom_id]])
Il est en effet tâche très simple, mais je ne sais pas ce que je rechercherai (mots-clés) .
C'est le même problème que this, mais dans les rails.
EDIT: J'ai ajouté plus de détails à la question. Cela fonctionne, mais seulement si j'ai les deux params spécifiés. La sorcière n'est pas toujours le cas - je ne sais pas quels params seraient spécifiés.
Post.joins(:categories, :classrooms).where(["categories.id = ? AND classrooms.id = ?", params[:classroom_id], params[:category_id]])
Cela fonctionne, merci. Mais que se passe-t-il si j'ai une autre association plusieurs-à-plusieurs (disons Classrooms) à ce poste et je veux trouver à la fois par catégorie et par salle de classe? Quelque chose comme Post.where (["category.id =? ET classroom.id =?", Params [: category_id], params [: classroom_id]]) – Sergey
Que diriez-vous de: Post.where (["category_id =?" , params [: category_id]). où (["classroom_id =?", params [: classroom_id]]) – Chap
@chap Je n'ai pas ces champs dans la table Post. C'est pourquoi je demande.S'il vous plaît lire la question. – Sergey