저는 ActiveRecord :: Relation을 반환하는 다른 ActiveRecord 클래스 메서드보다 스코프의 이점을 찾으려는 10 페이지 이상을 조사했습니다. 예제에 대해 다음에서 스코프의 실제 이점은 무엇입니까
왜 같은 일을 그 아래에있는 대안보다 더 범위입니다#scope :pat1, lambda {{:conditions => ["name like ?", 'J%']}}
#scope :pat2, lambda {{:conditions => ["id > 5"]}}
def self.pat1
where("name like ?", 'J%')
end
def self.pat2
where("id > 5")
end
def patx
self.class.pat1.pat2.first
end
문서해서 또 다시 그들이 체인 될 수 있기 때문에 범위가 도움이되는 것을 말한다 ...
"모든 범위 메서드는 다른 메서드와 같은 다른 메서드를 호출 할 수있는 ActiveRecord :: Relation 개체를 반환합니다." - guides.rubyonrails.org
...하지만 대안은 위 또한 생산 체인 될 수있다 "주된 이유 범위는 일반 클래스의 방법보다 더 나은 그들이 다른 방법으로 체인 될 수 있다는 것입니다" 같은 결과.
여기에 황제의 새 옷이 있는지 알아 내려고합니다. 통사론적인 관점에서조차도 아무런 유익이없는 것으로 보인다. 그들은 더 빠릅니다 - 일부 소식통은 모호하게 그것을 제안합니다.
Arel 나는 ActiveRecord :: Relation을 의미한다고 가정합니다. 승인. 통사론적인 이점은 나에게 논쟁의 여지가있다. 그러나 그들이 표준 방법이 이전 버전에서 할 수없는 일을한다면 그것은 그것을 설명합니다. – Mark
더 나은 구문을 사용하는 레일이 중요합니다. 1 일 (또는 심지어 100 일) 코드베이스가 아니라 1000 일 코드베이스입니다. –