2015-01-31 2 views
0

У меня есть приложение rails, где все сообщения отображаются в сообщениях, где я их хочу. Там у меня 10 сообщений на странице. Но, наряду с этой страницей, я хотел бы взять последние три сообщения и отобразить их в div на корневой странице.Показать последние 3 сообщения на главной странице

Не знаете с чего начать.

Благодаря

+0

Что вы подразумеваете под последними тремя сообщениями? – locoboy

+0

это фото-сайт. Итак, последние 3 фотографии были загружены. – user3561169

+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), и перебирайте ее.

+0

Обратите внимание, что 'last' вернет результаты в порядке возрастания. –

1

Метод поиска last вернет результаты в порядке возрастания. Если вы хотите вернуть результаты, упорядоченные по 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> 

Если вы хотите повторно использовать код представления, поместите его в частичное и визуализировать, что на ваших взглядах.

+0

Способ написания теста: предполагается, что каждый пост был создан один за другим. Если тест не был более общим, путем тестирования, чтобы узнать, меньше ли чем-то из трех должностей для каждой из трех должностей (в зависимости от сортировки по ASC/DESC)? –

+0

Эти даты 'created_at' являются произвольными. Цель теста - обеспечить ожидаемый выход 'Post.recent'. В этом случае возвращаются последние сообщения. Вид детализации, который вы упомянули, будет единичным тестом на 'order' в ActiveRecord. –

Смежные вопросы