Упорядочивание .each результаты в представлении - PullRequest
8 голосов
/ 19 мая 2010

Мне интересно, возможно ли диктовать порядок (то есть: order => 'made_at DESC') в представлении. Я понимаю, что логика в представлении не идеальна, но у меня, кажется, есть некоторые проблемы с поиском того, где повлиять на этот вывод.

Например, вот мой код:

<% @user.questions.each do |question| %>
  <%= link_to_unless_current h (question.title), question %>
   Created about <%= time_ago_in_words h(question.created_at) %> ago
   Updated about <%= time_ago_in_words h(question.updated_at) %> ago

   <%= link_to 'Edit', edit_question_path(question) %> | 
   <%= link_to 'Destroy', question, :confirm => 'Are you sure?', :method => :delete %>

<% end %>

В моем QuestionController у меня есть следующее действие index, но оно не влияет на вывод кода выше.

class QuestionsController < ApplicationController 

def index

    @questions = Question.all(:order => 'created_at DESC', :limit => 20)

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @questions }
    end
  end

end

ОБНОВЛЕНИЕ: Что касается изменения @ user.questions на @questions, я получаю эту ошибку:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

ОБНОВЛЕНИЕ 2: Полагаю, я должен упомянуть, что этот код находится в представлении вопросов. views/questions/show.html.erb.

Ответы [ 4 ]

11 голосов
/ 19 мая 2010

Вы можете использовать:

<% unless @questions.empty? %>
   <% @questions.each do |question| %>
      # ...
   <% end %>
<% end %>

на ваш взгляд и

@questions = Question.all(:order => 'created_at DESC', :limit => 20)

внутри show или index метод QuestionsController.

4 голосов
/ 14 апреля 2014

Простой способ сделать это - использовать reverse_each вместо each:

<% @user.questions.reverse_each do |question| %>

Вы получаете свои вопросы в порядке убывания и ничего не трогаете в контроллере.

2 голосов
/ 19 мая 2010

вы должны использовать

<% @questions.each do |question| %>

вместо

<% @user.questions.each do |question| %>

Редакция. Вы можете избежать ошибки nil, используя один из следующих способов.

<% @questions.each do |question| %>


<% end unless @questions.blank?  %>

OR

<% for question in @questions %>


<% end unless @questions.blank?  %>
0 голосов
/ 19 мая 2010

Используйте переменную @questions вместо @user.questions в вашем представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...