So Sánh Class Method Và Scope
Tôi có 1 scope:
1 | class Product < ActiveRecord::Base |
Tôi có 1 class method:
1 | class Product < ActiveRecord::Base |
2 method này là hoàn toàn tương đương nhau, kết quả trả về cũng vậy. Bây giờ thử 1 ví dụ khác.
1 | class Product < ActiveRecord::Base |
Viết ví dụ trên dưới dạng Class Method:
1 | class Product < ActiveRecord::Base |
Tiến hành gọi liên tiếp Scope:
1 | Product.by_type(nil).is_active |
Tiến hành gọi liên tiếp Class Method:
1 | Product.by_type(nil).is_active |
Ủa vậy chuyện này là sao? Tại sao Scope vẫn work bình thường trong khi Class Method lại bắn về một exception?
Đây chính là điểm khác biệt quan trọng của Scopy và Class Method.
Scope luôn luôn trả về một ActiveRecord Relation. Còn Class Method thì sao? Nếu bạn không cover trường hợp nil/blank thì nó sẽ văng về nil/blank như vậy không thể chạy Class Method phía sau, vì method đó không thể chạy với nil/blank.