Ruby on rails 为什么在动态构建对象数组后接收未定义的方法?红宝石

Ruby on rails 为什么在动态构建对象数组后接收未定义的方法?红宝石,ruby-on-rails,arrays,ruby,Ruby On Rails,Arrays,Ruby,我正在为一个简单的博客构建一个浏览量最大的帖子功能。每个帖子都有一个视图计数,当为该特定帖子调用Show操作时,视图计数会增加。然后在仪表板上,我试着列出前5个帖子。到目前为止,我的代码可以工作并返回一个post数组,其中视图计数最高的post是第一个索引,数组中的最后一个索引是视图计数最低的post。唯一的问题是,当我尝试在视图中遍历数组时,视图返回: 错误 为什么???它与物体的正面有关吗 这是我的密码 仪表板视图 控制器方法 顶级播客对象数组 尝试: 您不需要设置数组索引。另一个答案可能会

我正在为一个简单的博客构建一个浏览量最大的帖子功能。每个帖子都有一个视图计数,当为该特定帖子调用Show操作时,视图计数会增加。然后在仪表板上,我试着列出前5个帖子。到目前为止,我的代码可以工作并返回一个post数组,其中视图计数最高的post是第一个索引,数组中的最后一个索引是视图计数最低的post。唯一的问题是,当我尝试在视图中遍历数组时,视图返回:

错误

为什么???它与物体的正面有关吗

这是我的密码

仪表板视图

控制器方法

顶级播客对象数组

尝试:


您不需要设置数组索引。

另一个答案可能会解决您的错误,但只想尝试优化代码。 那个数组、循环等都是不必要的,让你的db去做这些事情,并得到最上面的帖子。获取所有帖子并在上面循环多次…不,试试下面的方法,希望这就是你想要的

@top_posts = Post.order('view_count desc').limit(5)

就是这样,您的视图不需要更改,将按预期工作。

罪恶的Ruby解释器的地狱充满了这样的代码。
<h3> Post </h3>
<% @top_posts.each do |post| %>
  <%= post.title %>
<% end %>
def get_top
 @top_posts = []
 counts = []
 @posts = Post.all

 @posts.each do |post|
    counts << post.view_count
 end

 @posts.each do |post|
    if counts.max(5).include?(post.view_count)
        counts.max(5).each do |n|
            if n == post.view_count
              @top_posts[counts.max(5).index(n)] = post
            end
        end 
    end
  end

end


def dashboard
  @posts = Post.all
  get_top
end
[#<Post id: 6, title: "Post 6", desc: "", tags: "", view_count: 8, s_desc: "", c_photo: nil, photos: nil, created_at: "2017-06-14 06:02:25", updated_at: "2017-06-15 01:38:40", featured: nil>, #<Post id: 3, title: "post 3", desc: "", tags: "", view_count: 5, s_desc: "", c_photo: nil, photos: nil, created_at: "2017-06-14 05:35:32", updated_at: "2017-06-14 05:35:53", featured: nil>, #<Post id: 5, title: "Post 5", desc: "", tags: "", view_count: 4, s_desc: "", c_photo: nil, photos: nil, created_at: "2017-06-14 06:02:20", updated_at: "2017-06-15 01:38:31", featured: nil>, nil, #<Post id: 4, title: "Post 4", desc: "", tags: "", view_count: 3, s_desc: "", c_photo: nil, photos: nil, created_at: "2017-06-14 05:49:29", updated_at: "2017-06-15 01:38:50", featured: nil>]
@top_posts << post
@top_posts[counts.max(5).index(n)] = post
@top_posts = Post.order('view_count desc').limit(5)