我正在为一个简单的博客构建一个观看次数最多的帖子。每个帖子都有一个视图计数,当为该特定帖子调用Show操作时,该计数会增加。然后在仪表板上,我试图列出前5个帖子。到目前为止,我的代码工作并返回一个帖子数组,其中查看计数最多的帖子是第一个索引,数组中的最后一个索引是视图数量最少的帖子。唯一的事情是当我尝试在视图中迭代数组时,视图返回:
错误
undefined method `title' for nil:NilClass
WHY ???它与对象前面的“#”有关吗?
继承我的代码。
信息中心视图
<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
Top Podcast对象数组
[#<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>]
答案 0 :(得分:0)
尝试:
@top_posts << post
而不是:
@top_posts[counts.max(5).index(n)] = post
您不需要设置数组索引。
答案 1 :(得分:0)
另一个答案可能会解决您的错误,但只是想尝试优化您的代码。 那个数组,循环等是不必要的,请你的数据库做那些东西并获得最高职位。获取所有帖子并多次循环...不,请尝试以下操作,希望这是您正在寻找的...
setTag()
那就是它,你的观点不需要改变,并且会按预期工作。