2012-03-10 38 views
39

trong ứng dụng của tôi, tôi có người dùng từ các nước khác nhau và muốn thực hiện phát hiện trên chúngRails: Tìm tất cả với điều kiện

tôi đã cố gắng để làm điều đó như thế này trong action index

@fromcanada = User.find(:all, :country => 'canada') 

nhưng tôi đã nhận lỗi

Unknown key: country 

Tuy nhiên, để tôi hỏi, điều gì có thể trở thành chìa khóa? Trong tệp lược đồ cơ sở dữ liệu của tôi, tôi có cột "quốc gia" trên bảng người dùng.

t.string "country" 

Hơn nữa, khi tôi đã làm một tìm thấy tất cả

@users = User.all 

tôi đã có thể làm được điều này

<%= user.country %></p> 

Bạn có thể giải thích tại sao Find My tất cả với điều kiện không làm việc? và chỉ cho tôi cách tôi nên làm điều đó?

+1

Bạn đang sử dụng phiên bản Rails nào? – James

+3

'@fromcanada = User.where (: country => 'canada'). All' có lẽ sẽ là kiểu tốt hơn. –

+0

@muistooshort tại sao gọi 'all' là cần thiết? Khi bạn gọi 'User.all' bạn nhận được tất cả người dùng nhưng tôi không hiểu ý nghĩa khi bạn lọc người dùng bằng' where' (xin lỗi cho câu hỏi newbie) –

Trả lời

67

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

@fromcanada = User.find(:all, :conditions => { :country => 'canada' }) 

chỉnh sửa: Như jason328 chỉ ra, câu trả lời ở trên bị phản đối trong 3.2, và một câu trả lời được cập nhật sẽ

@fromcanada = User.where(:country => 'canada') 
30

Trong trường hợp không có ai đọc các ý kiến. Một định dạng tốt hơn sẽ là

@fromcanada = User.where(country: 'canada').all 

Mã câu trả lời trước đó không được dùng nữa trong 3.2.

Và đối với những người sử dụng Rails 4, việc xóa phương thức all sẽ đủ.

@fromcanada = User.where(country: 'canada').to_a 

Lưu ý rằng to_a gọi truy vấn thành định dạng mảng.

+3

Việc sử dụng Relation # all này không được dùng trong thanh ray 4. Nếu bạn muốn để tải mong muốn, chỉ cần thay thế 'tất cả' bằng' tải'. Nếu không, bạn thậm chí không cần 'all'. Câu trả lời của bạn không sai. Tôi chỉ nhìn về phía trước tại đường ray 4. – courtsimas

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