2012-04-21 28 views
39

Đường trong cấu trúc truy vấn sql để chỉ chọn các cột nhất định từ cơ sở dữ liệu là gì, tôi có một số trường dữ liệu lớn mà tôi muốn tránh tải từ các cuộc gọi ajax liên tục định kỳ . Đọc không cần thiết là tiêu thụ tài nguyên và chậm.Đường ray Ruby - chỉ chọn một vài cột từ cơ sở dữ liệu

@itemlist = Item.find(:all, :conditions => { .... }) #this select all columns 

Tôi đang tìm kiếm SELECT name, address FROM users; thay vì SELECT * FROM users;

+2

Thông thường nếu bạn không cần/sử dụng các cột khác, bạn nên suy nghĩ về bình thường hóa dữ liệu. –

Trả lời

93

Rails 3:

Item.select("name, address").where(....)

+0

Yup, tuyệt vời! Quảng bá cái này, các bạn, vì Rails 3 nổi tiếng hơn cái thứ 2 –

+2

Ngoài ra, nếu bạn có nhiều hơn một bảng trong câu lệnh 'SELECT' và bạn đang tham chiếu một cột có thể tồn tại trong hơn 1 bảng , bao gồm bảng trong lựa chọn, như 'select (" items.name, users.address ")'. –

+0

Không hoạt động khi tôi tham gia bảng – Chinmay235

2

Hãy thử điều này:

@itemlist = Item.find(:all, :select => "name, address", :conditions => { .... }) 
21

Make sử dụng :select xây dựng. Hãy thử điều này:

@itemlist = Item.select('name, address', conditions: { .... }) 

Đối với phiên bản trước của Rails:

@itemlist = Item.find(:all,:select => 'name, address', :conditions => { .... }) 
+4

Điều này không còn đúng và không được hỗ trợ trong Rails 4. Trả lời cần cập nhật. – superluminary

+1

Câu trả lời đã được cập nhật sau bình luận của siêu sáng để phản ánh cú pháp .select mới. –

8

Sử dụng Arel (aka trong Rails 3), sử dụng:

Item.where(...).select("name, address") 

Ngoài ra, có vẻ như .Chọn bị bỏ qua nếu bạn dựa vào phạm vi có: bao gồm => ...

+0

cảm ơn sự giúp đỡ! –

5
@itemlist = Item.select('name, address').where(...#some condition) 
Các vấn đề liên quan