限制Ruby on Rails视图中的帖子

时间:2016-11-18 19:03:25

标签: ruby-on-rails ruby

我正在为新闻应用程序构建侧边栏。在应用程序中,我按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>

1 个答案:

答案 0 :(得分:0)

想要一个随机的帖子或第一个会做。

你可以做这样的事。

<% sidebar_post = @posts.select{ |p| p.ranking == "sports" && p.title != @post.title }.first %>

然后只渲染一个。由于您没有处理活动记录关系,因此您正在处理帖子实例,因此限制不起作用。

如果你想要一个随机元素。只需将.first更改为.sample

即可

这也假定您在此控制器/视图中的其他位置使用@posts。如果您只是使用它来获取侧边栏帖子,您可以将其移动到控制器中并使用sql / ar执行该请求,这可能更快/更有效。