2010-05-19 2 views
8

Ich frage mich, ob es möglich ist, die Reihenfolge (d. H.: Bestellung => 'created_at DESC') in der Ansicht zu diktieren. Ich erkenne, dass die Logik in der Ansicht nicht ideal ist, aber ich habe einige Probleme mit der Lokalisierung, wo diese Ausgabe wirkt.Bestellung. Jedes Ergebnis in der Ansicht

Zum Beispiel, hier ist mein Code:

<% @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 %> 

In meinem QuestionsController ich die folgende Index Aktion haben, aber es ist nicht die Ausgabe von dem obigen Code zu beeinflussen.

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 

UPDATE: Hinsichtlich der @ user.questions zu @questions an veränderte ich diesen Fehler:

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 

UPDATE 2: Ich denke, ich sollte erwähnen, dass dieser Code in den Fragen ist zeigen Ansicht . views/questions/show.html.erb.

+0

Bearbeitete meine Antwort:] –

Antwort

10

können Sie verwenden:

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

aus Ihrer Sicht und

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

innerhalb show oder index Methode von QuestionsController.

+0

Das ist nicht die tatsächliche Syntax für die Ansicht richtig? Es braucht das <% nicht wahr? – bgadoci

+0

Ja, du brauchst es ... –

2

sollten Sie

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

statt

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

EDITED verwenden. Sie können den Fehler nil vermeiden, indem Sie eine der folgenden Methoden verwenden.

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


<% end unless @questions.blank? %> 

ODER

<% for question in @questions %> 


<% end unless @questions.blank? %> 
+0

Wenn ich das tue, erhalte ich einen Fehler. Ich habe meine Frage aktualisiert. – bgadoci

+0

überprüfen Sie bitte meine bearbeitete Antwort. – Salil

+0

Schön ... das hat den Fehler beseitigt, aber die Fragen des Benutzers werden jetzt nicht berücksichtigt. Wie sende ich: Benutzer mit der Anfrage? – bgadoci

0

Verwenden Sie die Variable @questions statt @user.questions aus Ihrer Sicht.

+0

Wenn ich das mache, bekomme ich einen Fehler. Ich habe meine Frage aktualisiert. – bgadoci

4

Eine einfache Möglichkeit, es zu tun ist reverse_each statt each zu verwenden:

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

Sie erhalten Ihre Fragen in absteigender Reihenfolge, und nicht alles in der Steuerung berühren.