Я использую Rails 2.3.9.Чтобы проиллюстрировать проблему, предположим, что у нас есть именованная область действия в модели:
class Book < ActiveRecord::Base
named_scope :has_isbn, :conditions => 'isbn IS NOT NULL'
end
Если вы получите класс именованной области действия, возвращается ActiveRecord::NamedScope::Scope
:
Book.has_isbn.class
# => ActiveRecord::NamedScope::Scope
, если вы используете #is_a?
или ===
, чтобы выяснить, является ли это областью действия, возвращается false
:
Book.has_isbn.is_a?(ActiveRecord::NamedScope::Scope)
# => false
ActiveRecord::NamedScope::Scope === Book.has_isbn
# => false
Кто-нибудь знает, почему это происходит?Вызов именованной области возвращает экземпляр ActiveRecord::NamedScope::Scope
(если вы посмотрите на lib/active_record/named_scope.rb
в коде Rails, вы увидите, что он вызывает Scope.new
и возвращает его), так почему же #is_a?
и ===
не возвращаютtrue