저는 마이그레이션 프로젝트를 진행 중입니다. 레일즈 2.x 앱을 3.x로 마이그레이션하고 싶습니다. 적극적인 기록에 문제가 있습니다. 레일 2.X에서활성 레코드 클래스
:
arr=StorageUnit.find(:all, :conditions =>"type='Drawer'")
위의 코드는 나에게 형 서랍 모든 기록을 얻을 것이다. 여기
상기 기능은 중단된다 레일에 3.x
arr.class
=> Array
. 그래서 나는 사용해야했다
arr=StorageUnit.where("type='Drawer'")
위 코드는 Drawer 유형의 모든 레코드를 가져다 줄 것이다.
arr.class
ActiveRecord::Relation
내 생각 엔 액티브 레코드가 변경 되었기 때문입니다. 제 문제는이 클래스를 기반으로하는 몇 가지 코드가 있다는 것입니다. 예를 들어
: 그래서 같은 오프
if arr.class== Array
do something
else
do something
end
는 지금은 더 나은 솔루션이나 그것을 해결하기 위해 어떤 다른 방법이 있는지 알고 그냥 궁금
if arr.class== ActiveRecord::Relation
do something
else
do something
end
로 변경되었습니다. 나는 그런 물건을 사용한 곳이 많다.
편집 :
arr=StorageUnit.where("type='Drawer'").all
가 배열로 클래스를 제공합니다. 내 목적은 접미사가없는 코드가 결국 모든 것을 사용하는 것보다 필요한 레코드를 제공 할 수있는 시점을 파악하는 것입니다. 수업을 바꾸는 것 뿐인가? 누군가 ecxplain 수 있습니까?
명시 적으로 사물의 클래스를 확인하는 것은 매우 관용적 인 루비가 아닙니다. –
@FrederickCheung이 정확합니다. 클래스를 절대적으로 검사해야한다면'arr.is_a? (Array) '를 사용할 수 있습니다. –