如何构建一个返回用户帖子和帖子的查询。类别?

时间:2014-04-24 18:55:25

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

在我的控制器的索引操作中:

@posts = current_user.posts.process_and_return_posts  

在模型中:

class Post < ActiveRecord::Base
  belongs_to :user
  belongs_to :category

  def self.process_and_return_posts
    # doing some cleanup
    # return posts
  end
end

在视图中我将按类别显示帖子,我想知道我应该如何构建查询以及我想要帖子的集合类型?

我需要集合包含Category对象和Post对象(因为我将在视图中迭代它们时对它们进行排序)。

2 个答案:

答案 0 :(得分:2)

我想你想要的是

group_by { |post| post.category }

这样您就可以在视图中使用

Post.process_and_return_posts.keys.each do |category|
  category.posts ...
end

这也应与您的协会结合使用

current_user.posts.process_and_return_posts.keys.each do |category|
  category.posts ...
end

答案 1 :(得分:1)

重要的是要注意current_user.posts实际返回填充了Post对象的Array对象,一个post对象。

所以你应该在Enumerable模块而不是Post类中使用patch process_and_return_posts方法。

你可以在Rails上以多种方式修补补丁,但我最喜欢的方法是将所有猴子修补的代码放在一个地方,以便我知道之前修补过的猴子。

从您的rails目录config/initializers内,创建一个名为extensions的目录。这是您可以放置​​所有猴子修补代码的地方。在config/initializers/extensions内,创建一个名为enumerables.rb的Ruby文件,以便稍后您知道此代码包含可用数据的代码。

config/initializers/extensions/enumerables.rb

module Enumerable
  def process_and_return_posts
    # your code here.
  end
end

每当您更新initializers中的任何内容时,请务必重新启动rails服务器。