0

j'ai le code suivantmany_to_many, sti et paginera

class Category < ActiveRecord::Base 
    has_many :categorizations 
    has_many :posts, :through => :categorizations 
end 

class Post < ActiveRecord::Base 
    has_many :categorizations 
    has_many :categories, :through => :categorizations 
end 

class Categorization < ActiveRecord::Base 
    belongs_to :post 
    belongs_to :category 
end 

class NewsArticle < Post 
end 

ok, semble bon. I'me essayer d'obtenir tous les NewsArticle de la catégorie

@news_articles = NewsArticle.paginate_by_category_id params[:category], 
    :page => params[:page], :per_page => 10, 
    :order => 'posts.created_at DESC' 

et je vois

NoMethodError in News articlesController#category 

undefined method `find_all_by_category' for #<Class:0x103cb05d0> 

Que puis-je faire pour résoudre ce problème?

Répondre

1

J'ajouter des étendues nommées et les utiliser avec paginate:

class Post < ActiveRecord::Base 
    .. 
    named_scope :newest, :order => 'posts.created_at DESC' 
    named_scope :by_category, lambda { |category_id| { 
    :joins => :categories, 
    :conditions => ['categories.category_id = ?', category_id] 
    } } 
end 

@news_articles = NewsArticle.newest.by_category(params[:category]).paginate(
    :page => params[:page], :per_page => 10 
) 
+0

semble beaucoup mieux :)) merci :) mais malheureusement les messages ne peuvent être trouvés si le modèle de la catégorie est sous friendly_id (http://github.com/norman/friendly_id) :( PS: petite correction de votre exemple - : conditions => ['categories.id =?', Category_id] –

+0

J'ai mis à jour votre exemple un peu et maintenant il fonctionne bien @category = Category.find params [: category] @news_articles = NewsArticle.newest.by_category (@ category.id) ..... –

2

Que diriez-vous:

@news_articles = NewsArticle.paginate(:conditions => { :category_id => params[:category_id].to_i }, :page => params[:page], :per_page => 10, :order => 'posts.created_at DESC') 

Êtes-vous passer le id catégorie que params[:category] ou params[:category_id]? Si vous n'êtes pas sûr, vous pouvez debug(params) à votre avis.

+0

mieux, mais maintenant il ressemble à « pas de colonne: posts.category_id » je passe id catégorie comme params [: catégorie ] –

+0

Essayez de passer à: order =>: category_id – bensie

Questions connexes