Я задаюсь вопросом, возможно ли продиктовать порядок (т.е.: закажите => 'created_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 %>
В моем QuestionsController у меня есть следующее индексное действие, но это не влияет на вывод из кода выше.
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.
Вы можете использовать:
<% unless @questions.empty? %>
<% @questions.each do |question| %>
# ...
<% end %>
<% end %>
в вашем представлении и
@questions = Question.all(:order => 'created_at DESC', :limit => 20)
внутри show
или index
метода QuestionsController
.
вы должны использовать
<% @questions.each do |question| %>
вместо
<% @user.questions.each do |question| %>
EDITED. Вы можете избежать нулевой ошибки, используя один из следующих способов.
<% @questions.each do |question| %>
<% end unless @questions.blank? %>
ИЛИ
<% for question in @questions %>
<% end unless @questions.blank? %>
Используйте переменную @questions
вместо @user.questions
.