2012-08-06 25 views
6

Tôi muốn tìm kiếm một bảng có nhiều điều kiện trong Rails. Tôi đang sử dụng bản ghi Hoạt động và đường ray phiên bản 3.1.0.Tìm theo nhiều điều kiện trong đường ray

tôi có phản đối phim, và muốn đạt được tương đương với ở đường ray sau:

Select * from Movies where rating = 'R' OR rating = 'PG' 

Tôi đã thử các sau nhưng nó không hoạt động

@filtered = Movies.find(:all, :conditions => { :rating => 'R', :rating => 'PG' }) 

Bạn có thể vui lòng cung cấp giúp đỡ để viết một truy vấn SQL tương đương được đề cập ở trên.

Trả lời

10

Một cách sẽ được xây dựng một "IN" điều kiện với:

@filtered = Movie.where(:rating => ['R', 'PG']).all 

EDIT: Tôi đã thay đổi lớp học của bạn để "Phim" từ "Phim". Tôi cho rằng đó là những gì bạn sẽ muốn.

+0

'.all' là không cần thiết. – Mischa

+0

@Mischa - Rất đúng, nhưng điều đó tất nhiên sẽ phụ thuộc vào địa điểm và cách thức người ta sử dụng câu lệnh, và tôi đồng ý trong hầu hết các trường hợp không cần thiết. Đối với câu trả lời này, tôi muốn trả về một cách rõ ràng mảng kết quả và không phải là đối tượng ActiveRecord :: Relation để tránh bất kỳ sự nhầm lẫn nào có thể xảy ra. Cảm ơn bạn đã chỉ ra điều đó! – miked

+0

Tôi nghĩ có vẻ lạ khi gọi 'all' khi bạn * không * muốn tất cả. Nếu bạn chỉ thực hiện nó để trả về một mảng thay vì một 'ActiveRecord :: Relation', nó sẽ IMO rõ ràng hơn để chỉ gọi' to_a' thay thế. – Mischa

4

Bạn có thể làm điều đó bằng:

Movie.where(:rating => ['R','PG']) 
4

Trong đường sắt 4, tìm thấy với nhiều điều kiện ví dụ xem xét tìm Profile với first_namelast_name

Profile.find_by first_name: 'stack', last_name: 'flow' 

Finds kỷ lục đầu tiên phù hợp với các điều kiện quy định. Không có thứ tự ngụ ý vì vậy nếu vấn đề đặt hàng, bạn nên tự mình xác định. Nếu không có hồ sơ được tìm thấy, trả về nil

Profile.find_by! first_name: 'stack', last_name: 'flow' 

Giống như find_by, ngoại trừ việc nếu không có hồ sơ được tìm thấy, đặt ra một lỗi ActiveRecord :: RecordNotFound.

Để biết thêm thông tin đọc Rails Finder Method

1: http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_byIn đường sắt 4, tìm thấy với nhiều điều kiện ví dụ xem xét tìm Profile với first_namelast_name

Profile.find_by first_name: 'stack', last_name: 'flow' 

Finds kỷ lục đầu tiên phù hợp với các điều kiện quy định. Không có thứ tự ngụ ý vì vậy nếu vấn đề đặt hàng, bạn nên tự mình xác định. Nếu không có hồ sơ được tìm thấy, trả về nil

Profile.find_by! first_name: 'stack', last_name: 'flow' 

Giống như find_by, ngoại trừ việc nếu không có hồ sơ được tìm thấy, đặt ra một lỗi ActiveRecord :: RecordNotFound.

Để biết thêm thông tin, hãy đọc Rails Finder Method

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