订购.each会导致视图

时间:2010-05-19 15:20:19

标签: ruby-on-rails ruby

我想知道是否可以在视图中指定订单(即:order =>'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.

4 个答案:

答案 0 :(得分:11)

您可以使用:

<% unless @questions.empty? %>
   <% @questions.each do |question| %>
      # ...
   <% end %>
<% end %>
在您的视图

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

show内的indexQuestionsController方法。

答案 1 :(得分:4)

一种简单的方法是使用reverse_each代替each

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

您按降序排列问题,不要触摸控制器中的任何内容。

答案 2 :(得分:2)

你应该使用

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

而不是

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

编辑。您可以使用以下方法之一来避免出现错误。

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


<% end unless @questions.blank?  %>

OR

<% for question in @questions %>


<% end unless @questions.blank?  %>

答案 3 :(得分:0)

在视图中使用变量@questions代替@user.questions