列出某个类别的所有帖子

时间:2015-03-20 18:30:52

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我目前有帖子型号,其上有类别:字符串列。我希望显示某些类别的所有帖子。

e.g。点击'技术'类别链接 - 加载所有以apple为类别的帖子。

无法在堆栈溢出上找到任何东西,但我可能正在寻找错误的东西。任何帮助都会很棒并且很感激!

由于

2 个答案:

答案 0 :(得分:1)

Post.where(category: 'Animals')

会返回指定类别的所有帖子。

关于问题下的评论 - 是的,你可以从另外的模型Category中受益,因为帖子可以有更多,而不是一个类别。

您可以将关系定义为以下之一:

  1. HBTM

    has_and_belongs_to_many :categories # post.rb has_and_belongs_to_many :posts # category.rb

  2. has_many through

  3. post.rb

    has_many :categories_posts
    has_many :categories, through: :categories_posts
    

    category.rb

    has_many :categories_posts
    has_many :posts, through: :categories_posts
    

    categories_posts.rb

    belongs_to :category
    belongs_to :post
    

    修改

    要向表单添加选择类别,请向其添加以下内容(假设Category具有name属性):

    <%= f.select :categories, Category.pluck(:id, :name), {}, multiple: true %>
    

    另外,请不要忘记在允许的参数(posts_controller.rb)中将类别列入白名单:

    def post_params
      params.require(:post).permit(:attr1, :attr2, category_ids: [])
    end
    

答案 1 :(得分:0)

在post.rb模型中,添加scope

scope :animals, -> { where(category: 'Animals') }

然后在你的控制器中,你可以打电话:

Post.all.animals