2012-02-06 4 views
0

다른 사람의 코드를 작업하고 있습니다. 계정 테이블에 사용자가 가지고있는 계정 유형 (유료, 무료 등)을 기록하는 "유형"이라는 열이 있습니다. 이제 활성 레코드를 통해 DB 호출을하려고합니다 :알 수없는 열 오류

<%= Account.count(:conditions => ["type = ?", "AccountDemo" ]) %> 

그러나 열이 발견되지 않습니다. 그것은 그가 "유형"이라는 단어를 사용했기 때문에 그것이 허용되지 않는 것입니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

단일 테이블 상속을 사용하여 상속 한 응용 프로그램입니까? 그렇다면 AccountDemo.count를보고 슈퍼 클래스에서 작동하지 않을 것입니다. –

답변

0

"type"은 일반적으로 단일 테이블 상속과 함께 사용되는 특수 열 이름입니다. STI를 사용하지 않을 경우, 먼저 해당 컬럼의 이름을 바 Y십시오. STI를 사용하는 경우 수퍼 클래스를 직접 사용하지 말고

AccountDemo.count 

을 수행해야합니다.

+0

Cool. 네가 할 수 있다는 것을 몰랐어. AccountDemo.count를 호출 할 수있는 때를 어떻게 알 수 있습니까? 또한 AccountFree와 AccountPaid도 있습니다. 레일이 자동으로 어떤 테이블을 사용 하는지를 알면 이상합니다. 어떻게 알 수 있습니까? –

+0

단일 테이블 상속 레일을 검색하면 주석을 넣을 수있는 것보다 훨씬 좋은 답변을 얻을 수 있습니다. 계정을 상속하는 클래스 (AccountDemo, AccountFree, AccountPaid)가 있는지 확인하십시오 (ActiveRecord에서 상속)? 존재하지 않는다면, 내가 제안한 것은 효과가 없을 것이다. 그들이 있다면, 레일은 단지 "type"컬럼을 통해 서브 클래스를 관리하고 있으며, 여러분 모두를 위해 관리됩니다. 서브 클래스에서 메소드를 호출하면 레일스는 자동으로 해당 유형의 수퍼 클래스에있는 레코드를 찾습니다. –

+0

네, 훌륭합니다. 고맙습니다. 빠른 후속 질문 - 계정에 users_count라는 또 다른 열이 있습니다. AccountPro.users_count 할 때 정의되지 않은 메서드 "users_count"라고 말합니다. AccountPros ..에 대해 존재하는 모든 users_count를 요약하고 싶습니다. 가능합니까? –