2012-12-09 25 views
5

Tôi đang sử dụng ruby ​​trên thanh ray và cố gắng kiểm tra xem truy vấn có trả về giá trị hay không.ruby-on-ray kiểm tra xem kết quả truy vấn có trống không (Model.find)

Đây là truy vấn:

@search = Customer.find_by_name($login_name) 

Nếu truy vấn tìm thấy kết quả là, mọi thứ đều tốt, nhưng làm thế nào tôi có thể phản ứng về kết quả sản phẩm nào?

tôi đã cố gắng:

if @search.empty? 
    flash[:notice] = 'Username nicht bekannt' 
    redirect_to :action => :login 
end 

Nhưng tôi nhận được một lỗi:

undefined method `empty?' for nil:NilClass 

Bất kỳ ý tưởng những gì đã xảy ra?

Cảm ơn bạn !!!

Trả lời

20

Sử dụng này để kiểm tra cho nil cũng như trường hợp rỗng:

@search.blank? 

Đối với trường hợp ngược lại (KHÔNG nil và KHÔNG trống), sử dụng .present?:

@search.present? #equivalent of [email protected]? 

Lý do truy vấn của bạn trở lại nil thay vì empty là:

Customer.find_by_name($login_name) 

luôn luôn ret Đỉnh một kết quả của đối tượng Customer hoặc nil nếu không có kết quả như vậy,

trong khi một cái gì đó như:

Customer.where(:name=>$login_name) 

sẽ đưa bạn trở ActiveRecord::Relation (có thể có kết quả 0-n) luôn. và phương pháp empty? sẽ hoạt động trên đó

+0

Tuyệt vời! Hoạt động hoàn hảo! Cảm ơn nhiều! – Tobi89

1

Nếu không tìm thấy kết quả nào, find_by_name trả về đối tượng không phải là một mảng trống. Để kiểm tra xem khách hàng đã được tìm thấy chưa, bạn có thể sử dụng if @search.nil? hoặc chỉ đơn giản là if [email protected] hoặc unless @search, vì nil bị bẩn trong ruby.

@search = Customer.find_by_name($login_name) 
unless @search 
    flash[:notice] = 'Username nicht bekannt' 
    redirect_to :action => :login 
end 
Các vấn đề liên quan