2013-02-09 114 views
-1

我有一个简单的博客网站,并试图从特定类别检索帖子。我已经将模型设置如下。如何在Ruby on Rails中显示特定类别的帖子

class Post < ActiveRecord::Base 
    has_many :categorizations 
    has_many :categories, through: :categorizations 

    attr_accessible :author, :description, :title, :photo, :category_ids 

    scope :breaking, lambda { |category_ids| 
     joins(:categorizations).where('categorizations.category_id' => category_ids) 
    } 
end 


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

class Categorization < ActiveRecord::Base 

    attr_accessible :category_id, :position, :post_id 

    belongs_to :post 
    belongs_to :category 
end 

我写在后模型范围称为打破,我不知道如何使它在视图中。此外,控制器会是什么样子,并且是为了检索特定类别下的帖子而打破范围?

回答

1

更改范围声明:

scope :breaking, lambda { |category_ids| 
    joins(:categorizations).where('categorizations.category_id = ?', category_ids) 
} 

scope :breaking, lambda { |category_ids| 
    joins(:categorizations).where(categorizations: { category_id: category_ids }) 
} 

而不是使用范围上的lambda表达式,我宁愿类方法,因为对我来说,他们看起来更具可读性。另外,添加默认值更加容易。

def self.breaking(category_ids) 
    joins(:categorizations).where(categorizations: { category_id: category_ids }) 
end 
+0

请问控制器怎么样,并查看他们看起来像什么,谢谢 – daniel 2013-02-09 03:12:02

+1

不幸的是,我不能在这里回答。你将不得不通过一个教程来做到这一点,或提出另一个问题。 – jvnill 2013-02-09 03:16:39