想要在主页上显示最后3个帖子

时间:2015-01-31 19:29:26

标签: ruby-on-rails ruby web

所以我有rails应用程序所有帖子都显示在/ posts上,这是我想要的地方。在那里,我每页有10个帖子。但是,随着这个页面 - 我想采取最后三个帖子,并在根页面的div中显示它们。

不知道从哪里开始。

由于

2 个答案:

答案 0 :(得分:1)

试试这个:

%div
  -Post.last(3).each do |p|
    %h1= p.title
    %p= p.author
    %p= p.content

Post.last(3)会返回您要查找的最后3个帖子。希望这会有所帮助。

P.S。您可能希望通过将Post.last(3)移动到控制器中的变量(例如@latest_posts = Post.last(3))并重复该变量来重构此操作。

答案 1 :(得分:1)

last finder方法将按升序返回结果。如果您想按降序排列created_at排序的结果,请按照以下方法(包括单元测试)。

应用/模型/ post.rb

class Post < ActiveRecord::Base
  def self.recent(max = 3)
    limit(max).order(created_at: :desc)
  end
end

<强>规格/模型/ post_spec.rb

RSpec.describe Post, type: :model do
  describe ".recent" do
    it "returns the most recent" do
      first_post  = Post.create(created_at: 3.days.ago)
      second_post = Post.create(created_at: 2.days.ago)
      third_post  = Post.create(created_at: 1.day.ago)

      result = Post.recent(2)

      expect(result).to eq([third_post, second_post])
    end
  end
end

在您的控制器中:

@recent_posts = Post.recent

在您看来:

<div id="recent-posts">
  <ul>
    <% @recent_posts.each do |post| %>
      <li><%= post.title %></li>
    <% end %>
  </ul>
</div>

如果您想重复使用视图代码,请将其放入局部视图并在视图中进行渲染。