我正在为新闻应用程序构建侧边栏。在应用程序中,我按post
组织了rating
类型。评级为"sports"
的帖子应显示在我的侧边栏中。但是在任何特定时间都有6个帖子的排名为"sports"
。
我希望标记排名"sports"
的一个帖子显示在我的侧边栏中。该帖子与展示页面的当前title
不能具有相同的@post
。我试过这个,但它没有用。
我得到了
undefined method `limit' for #<Post:0x007f9b553ce1d0>
当我尝试在本地打开页面时出错。如果我在limit
语句中使用@post
,则limit
有效。
有人可以帮忙吗?
<div class="col-md-11 col-md-push-1 sidebar2">
<div class="sidebar_head_container">
<h4 class="sidebar_header text-center">Local News</h4>
</div>
<% @posts.each do |p| %>
<% if p.ranking == "sports" %>
<% if p.title != @post.title %>
<% p.limit(1) do |x| %>
<a href='/posts/<%= p.slug %>'>
<div class="photo_div">
<%= image_tag x.photo, class: "photo_small" %>
<h5 class="white_green"><%= x.title %></h5>
</div>
</a>
<% end %>
<% end %>
<% end %>
<% end %>
</div>
答案 0 :(得分:0)
想要一个随机的帖子或第一个会做。
你可以做这样的事。 <% sidebar_post = @posts.select{ |p| p.ranking == "sports" && p.title != @post.title }.first %>
然后只渲染一个。由于您没有处理活动记录关系,因此您正在处理帖子实例,因此限制不起作用。
如果你想要一个随机元素。只需将.first
更改为.sample
这也假定您在此控制器/视图中的其他位置使用@posts。如果您只是使用它来获取侧边栏帖子,您可以将其移动到控制器中并使用sql / ar执行该请求,这可能更快/更有效。