레일 2.3.9를 사용하고 있습니다. 당신이 #is_a?
를 사용하거나 경우에, 그러나# is_a가 아닌 이유는 무엇입니까? ActiveRecord :: NamedScope :: Scope의 인스턴스로 작업하십시오.
Book.has_isbn.class
# => ActiveRecord::NamedScope::Scope
: 명명 된 범위의 클래스를 얻을 경우
class Book < ActiveRecord::Base
named_scope :has_isbn, :conditions => 'isbn IS NOT NULL'
end
, ActiveRecord::NamedScope::Scope
가 반환됩니다 문제를 설명하기 위해, 우리는 모델에 명명 된 범위가 가정
Book.has_isbn.is_a?(ActiveRecord::NamedScope::Scope)
# => false
ActiveRecord::NamedScope::Scope === Book.has_isbn
# => false
이 사람이 왜 이런 일을 알고 있나요 : ===
는 범위, 그것은 false
반환 여부를 파악하기 위해? 명명 된 스코프를 호출하면 ActiveRecord::NamedScope::Scope
의 인스턴스를 반환합니다 (레일스 코드에서 lib/active_record/named_scope.rb
을 보면 리턴 코드가 Scope.new
이고 리턴 됨), 왜 #is_a?
과 ===
은 true
으로 반환되지 않습니까? Scope
클래스
아 ... 범위 코드를 볼 때 이것을 놓쳤습니다. 답변 해주셔서 감사합니다! – Claw