0

я следующий кодmany_to_many, STI и отформатирует

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 

ок, хорошо выглядит. I'me пытается получить все NewsArticle годов из категории

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

и я вижу

NoMethodError in News articlesController#category 

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

, что я могу сделать, чтобы решить эту проблему?

ответ

1

Я хотел бы добавить именованные группы и использовать их с постраничной:

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

выглядит намного лучше :)) спасибо :), но, к сожалению, сообщения не могут быть найдены, если категория модели находится под friendly_id (http://github.com/norman/friendly_id) :( PS: небольшая коррекция вашего примера - : условия => ['categories.id =?', Category_id] –

+0

У меня есть немного обновил ваш пример, и теперь он отлично работает @category = Параметры категории.find [: category] @news_articles = NewsArticle.newest.by_category (@ category.id) ..... –

2

Как насчет:

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

Вы пропусканием идентификатор категории, как params[:category] или params[:category_id]? Если вы не уверены, что можете указать debug(params).

+0

лучше, но теперь, похоже, «нет такой колонки: posts.category_id» Я передаю идентификатор категории, как Params [: категория ] –

+0

Попробуйте переключиться на: order =>: category_id – bensie

Смежные вопросы