2015-04-27 9 views
0

У меня возникли проблемы с отображением информации из моей базы данных в Rails. Я могу отображать каждую строку на одной странице, но я не могу ограничить отображение только 5 строками данных. В моем коде статья - это модель с текстовым полем и полем заголовка. Я использую рельсы 4.1.8 и Ruby 2.1.5.Rails: Отображение данных Postgres в представлениях

код я использую:

<% posts = Article.all.order('created_at DESC'%> 
    <% posts.find_each(batch_size: 5) do |post| %> 
    <li>Title: <% post.title %></li> 
    <li>Date: <% post.created_at.strftime("%d %b. %Y") %></li> 
    <li>Body: <% post.text %></li> 
    <% end %> 

И выход я получаю из него:

<li>Title: </li> 
    <li>Date: </li> 
    <li>Body: </li> 
    <li>Title: </li> 
    <li>Date: </li> 
    <li>Body: </li> 

Причина есть два набора здесь, потому что я в настоящее время только две статьи в базы данных, которая, по крайней мере, показывает, что к этой базе данных обращаются сюда, но использование post.title фактически не возвращает какой-либо текст.

В рамках обучающей программы, я использовал этот код:

 <% @articles.each do |article| %> 
    <tr> 
    <td><%= article.title %></td> 
    <td><%= article.text %></td> 
    <td><%= article.created_at.strftime("%d %b. %Y") %></td> 
    <td><%= link_to 'Show', article_path(article) %></td> 
    <td><%= link_to 'Edit', edit_article_path(article) %></td> 
    <td><%= link_to 'Destroy', article_path(article), 
      method: :delete, 
      data: { confirm: 'Are you sure?' } %></td> 
    </tr> 

Этот код делает именно то, что я ожидал, но, конечно, он отображает каждую строку в базе данных, которая будет подавляющим для большой количество статей.

Надеюсь, это очень простой вопрос, и я просто делаю очевидную ошибку ... Это мой первый раз, когда я использую Ruby или Rails (я делаю это, пытаясь научиться школьному проекту).

Благодарим за помощь!

ответ

2

Существует большая разница между:

<% post.title %> 

и

<%= post.title %> 

Первый, просто запускает код рубиновый. Последний, запускает код ruby, затем выводит результат на экран. Если вы хотите, чтобы название пост, чтобы показать, что вам нужно одно с =

+0

Это очень полезно знать. –

-1

Пара вещей на find_each. http://apidock.com/rails/ActiveRecord/Batches/ClassMethods/find_each Он будет игнорировать любые операции заказа.

Я предложил бы делать следующие изменения:

<% Article.order('created_at DESC').limit(5).each do |post| %> 
<li>Title: <% post.title %></li> 
<li>Date: <% post.created_at.strftime("%d %b. %Y") %></li> 
<li>Body: <% post.text %></li> 
<% end %> 
1

Вы должны быть выборка статей в контроллере:

def index 
    @articles = Article.order('created_at DESC').limit(5) 
end 

limit(5) здесь волшебство, что вы хотите: ограничивая результат устанавливается только на первые 5 объектов.

Taryn прав, что вам нужно будет использовать <%=, а не <% для вывода значений.

+0

При использовании переменных с контроллера они всегда передаются в представление так? –

+0

Только когда вы называете их '@' перед ними –

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