2010-05-19 16 views
8

Zastanawiam się, czy można dyktować zamówienie (tj .: order => 'created_at DESC') w widoku. Zdaję sobie sprawę, że logika w widoku nie jest idealna, ale wydaje mi się, że mam problemy z ustaleniem, gdzie wpływać na ten wynik.Zamawianie .each wyniki w widoku

Na przykład, tutaj jest mój kod:

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

W moim QuestionsController mam następujące działania indeksu, ale to nie wpływa na wyjście z kodem powyżej.

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: W odniesieniu do zmiany @ user.questions do @questions otrzymuję ten błąd:

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: Chyba powinienem wspomnieć, że ten kod jest w pytaniach pokazują widok . views/questions/show.html.erb.

+0

Zmieniono moją odpowiedź:] –

Odpowiedz

10

Można użyć:

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

w widoku i

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

wewnątrz show lub index metodę QuestionsController.

+0

To nie jest rzeczywista składnia widoku, prawda? Potrzeba <% nie jest? – bgadoci

+0

Tak, potrzebujesz tego ... –

2

należy użyć

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

zamiast

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

edytowany. Możesz uniknąć błędu braku, korzystając z jednego z następujących sposobów.

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


<% end unless @questions.blank? %> 

LUB

<% for question in @questions %> 


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

Kiedy to zrobię, pojawia się błąd. Zaktualizowałem moje pytanie. – bgadoci

+0

proszę sprawdzić moją EDYSTEM Answer. – Salil

+0

Fajne ... że pozbyłem się błędu, ale teraz nie wciągam teraz pytań użytkownika. Jak wysłać: użytkownik z prośbą? – bgadoci

0

użyć zmiennej @questions zamiast @user.questions w widoku.

+0

Kiedy to zrobię, pojawia się błąd. Zaktualizowałem moje pytanie. – bgadoci

4

Łatwym sposobem, aby to zrobić jest użycie reverse_each zamiast each:

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

Masz pytania w kolejności malejącej, a nic w sterowniku nie dotykać.