2010-05-19 30 views
8

Tôi tự hỏi nếu có thể ra lệnh cho đơn đặt hàng (tức là: order => 'created_at DESC') trong chế độ xem. Tôi nhận ra rằng logic trong quan điểm không phải là lý tưởng nhưng tôi dường như có một số vấn đề định vị nơi để ảnh hưởng đến đầu ra này.Đặt hàng kết quả .each trong chế độ xem

Ví dụ, đây là mã của tôi:

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

Trong QuestionsController của tôi, tôi có action index sau nhưng nó không được làm ảnh hưởng đến sản lượng từ các mã trên.

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: liên quan đến việc thay đổi user.questions @ để @questions Với tôi nhận được lỗi này:

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: Tôi đoán tôi nên đề cập đến rằng mã này là trong câu hỏi thể hiện quan điểm . views/questions/show.html.erb.

+0

Đã chỉnh sửa câu trả lời của tôi:] –

Trả lời

10

Bạn có thể sử dụng:

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

theo quan điểm của bạn và

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

bên show hay index phương pháp QuestionsController.

+0

Đó không phải là cú pháp thực tế cho chế độ xem phải không? Nó cần <% phải không? – bgadoci

+0

Có, bạn cần ... –

2

bạn nên sử dụng

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

thay vì

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

chỉnh sửa. Bạn có thể tránh lỗi nil bằng cách sử dụng một trong các cách sau.

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


<% end unless @questions.blank? %> 

HOẶC

<% for question in @questions %> 


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

Khi tôi làm điều đó, tôi gặp lỗi. Tôi đã cập nhật câu hỏi của mình. – bgadoci

+0

xin vui lòng kiểm tra trả lời EDITED của tôi. – Salil

+0

Đẹp ... điều đó đã loại bỏ được lỗi nhưng hiện tại nó không kéo theo câu hỏi của người dùng. Làm cách nào để gửi: người dùng có yêu cầu? – bgadoci

0

Sử dụng các biến @questions thay vì @user.questions theo quan điểm của bạn.

+0

Khi tôi làm điều đó tôi gặp lỗi. Tôi đã cập nhật câu hỏi của mình. – bgadoci

4

Một cách dễ dàng để làm điều đó là sử dụng reverse_each thay vì each:

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

Bạn nhận được câu hỏi của bạn theo thứ tự giảm dần, và không chạm vào bất cứ điều gì trong bộ điều khiển.

Các vấn đề liên quan