在我的控制器的索引操作中:
@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对象(因为我将在视图中迭代它们时对它们进行排序)。
答案 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服务器。