Tôi đã quen với Django, nơi bạn có thể chạy nhiều phương pháp lọc trên queryset, tức là Item.all.filter(foo="bar").filter(something="else")
.Lọc truy vấn ActiveRecord trong đường ray
Tuy nhiên điều này không dễ dàng thực hiện trong Rails. Item.find(:all, :conditions => ["foo = :foo", { :foo = bar }])
lợi nhuận một mảng có nghĩa là điều này sẽ không làm việc:
Item.find(:all, :conditions => ["foo = :foo", { :foo = 'bar' }]).find(:all, :conditions => ["something = :something", { :something = 'else' }])
Vì vậy, tôi đã tìm cách tốt nhất để "ngăn xếp" bộ lọc là để sửa đổi các mảng điều kiện và sau đó chạy truy vấn.
Vì vậy, tôi đã đưa ra chức năng này:
def combine(array1,array2)
conditions = []
conditions[0] = (array1[0]+" AND "+array2[0]).to_s
conditions[1] = {}
conditions[1].merge!(array1[1])
conditions[1].merge!(array2[1])
return conditions
end
Cách sử dụng:
array1 = [ "foo =: foo", {: foo = 'bar'}] array2 = [ "một cái gì đó =: something ", {: something = 'else'}] điều kiện = kết hợp (mảng 1, mảng2) mục = Item.find (: tất cả,: điều kiện => điều kiện)
Điều này đã hoạt động khá tốt. Tuy nhiên, tôi muốn có thể kết hợp một số mảng tùy ý hoặc viết tắt về cơ bản để viết:
conditions = combine(combine(array1,array2),array3)
Bất kỳ ai có thể trợ giúp việc này? Cảm ơn trước.
Đúng, đó là chính xác những gì tôi muốn. Tôi đã xem màn hình và nó có ý nghĩa với tôi. Nhưng ngay khi tôi kích hoạt mã, tôi nhận được một lỗi nói rằng phạm vi được đặt tên là một phương thức không xác định. Sau đó, tôi nhận thấy rằng tôi đã làm việc với Rails 1.8, vì vậy tôi đá quý cập nhật đường ray để 2.3.something và vẫn có cùng một lỗi .... ugh, tôi biết phạm vi được đặt tên là quá tốt là đúng:/ – user94154
Nếu bạn đóng băng Rails, sau đó mã của bạn vẫn đang sử dụng phiên bản trước của Rails. Rails 1.8 chưa từng tồn tại, vì vậy bạn phải có nghĩa là Ruby 1.8. rails -v là một lệnh sẽ cho bạn biết phiên bản Rails nào tồn tại ở dòng lệnh. script/about sẽ cho bạn biết thêm về môi trường của ứng dụng của bạn. –
cũng ruby script/về không được công nhận. Những gì hiện đông lạnh có nghĩa là về Rails? – user94154