2013-07-08 3 views
0

Я видел несколько похожих вопросов, но не успел с этим. Я хочу отобразить 3 последних сообщения на моей домашней странице.Показать 3 последних сообщений на домашней странице rails

Я определяю этот метод на моем PostsController

def noticia 
    @posts = Posts.all(:limit => 3) 
    end 
    helper_method :noticia 

и я призываю это на мой взгляд

- if @noticia 
    %h4.feed 
    A Sair 
    %h6 
     %span= @noticia.created_at.strftime("%d %b. %Y") 
     = link_to @noticia.content, posts_path 
    %p 
     - if current_admin 
     = link_to "Adicionar notícia", new_post_path 

Это дает NoMethodError

undefined method `each' for #<Post:0x00000102fb6fc8> 
+0

Есть ли ограничение по умолчанию? – Swards

+0

Вы ссылаетесь на @posts на ваш взгляд? – Swards

ответ

2

В вашем коде есть много странных вещей.

Ваш метод noticia должен быть:

def noticia 
    @posts = Post.order("created_at desc").limit(3) 
end 

Вам не нужно использовать helper_method.

И ваш файл представление должен быть что-то вроде:

- if @posts.any? 
    - @posts.each do |post| 
    = # do something with my post 

Надеется, что это помогает!

+0

Спасибо, это помогает! – kinguerra

2
@posts = Post.order('created_at').limit(3) 

@posts = Post.order('created_at DESC').limit(3) 

@posts = Post.order('created_at ASC').limit(3) 
+1

Я уже установил default_scope в моей модели Post. Проблема в том, что я просто не могу вызывать последние 3 элемента. – kinguerra

+1

Это не сработает. => 'undefined method 'order' для # '. Вы должны удалить вызов метода 'all'. –

+0

@JohnMcKey спасибо за головы. Я обновил пример кода. – westonplatter

0

Является ли ваша модель «Post '(не сообщения)?

Так вы можете использовать ограничение с помощью ActiveRecord.

def noticia 
    @posts = Post.limit(3) 
end