Tôi có đoạn mã sau:Rails "find_all_by" vs ".where"
def maturities
InfoItem.find_all_by_work_order(self.work_order).map(&:maturity)
end
Tôi đã suy nghĩ về việc thay đổi nó để:
def maturities
InfoItem.where(work_order: self.work_order).map(&:maturity)
end
Nên có bất kỳ lợi thế này? Có vẻ như .where
phổ biến hơn find_all_by
ngày nay.
Tôi đang trong quá trình nâng cấp một ứng dụng từ Rails 4.0.3 đến 4.1.0 và mã của tôi là sử dụng ' find_all_by' không còn hoạt động nữa ('NoMethodError'). Tôi không thấy bất cứ điều gì trong các ghi chú phát hành có thể ảnh hưởng đến nó. Tôi sẽ phải chuyển sang 'where'. Tôi đã sử dụng 'where' ngay từ đầu, mã của tôi sẽ ít bị lỗi như vậy. Có [một bình luận dưới đây] (http://stackoverflow.com/questions/11232971/rails-find-all-by-vs-where#comment14759921_11233522) đề cập rằng 'find_all_by_ *' sẽ không được chấp nhận trong Rails 4. Tuy nhiên, điều này đến làm tôi ngạc nhiên. Phương pháp này được loại bỏ ở đâu? – Dennis
Tôi tìm thấy nơi tài liệu của nó được ghi lại. Trong ghi chú phát hành 4.1: "Đã loại bỏ activerecord-deprecated_finders dưới dạng phụ thuộc. Vui lòng xem gem README để biết thêm thông tin." – Dennis
Tôi cũng khuyên bạn nên sử dụng 'pluck' thay vì' map' trong loại tình huống này. 'InfoItem.where (work_order: self.work_order) .pluck (: maturity)' – jurassic