2010-07-23 2 views
5

Rails 2/3에서 default_scope에 대한 질문. Rails 3 프로젝트에서 created_at desc로 order_scope를 많이 사용하고 있습니다. 그래서 먼저 내가 쓴 :ActiveRecord # default_scope 메서드 및 기본 순서에 대한 질문

 
default_scope order("created_at desc") 

를 내 모델의 많은에. 하지만 문제는 created_at이 거의 모든 응용 프로그램 테이블에 존재한다는 것입니다 ... 그래서 두 테이블에 조인을하는 쿼리를 작성하면 SQL 오류 모호한 열 created_at가 발생합니다 ... 그래서 다시 작성해야했습니다.

 
default_scope order("posts.created_at desc") 

이 문제를 처리 할 수있는 더 나은 방법이 있나요 아니면 유일한 솔루션입니다 : 모든처럼 TABLE_NAME을 포함하는 default_scopes?

감사합니다.

답변

9

Rails에서 SQL 문자열을 사용할 때 테이블 이름을 지정해야 이러한 모호성을 피할 수 있습니다. 다음과 같이 할 수 있습니다 :

default_scope order("#{table_name}.created_at desc") 
+0

나는 또한 백틱 ('\'')으로 포장하는 것이 좋습니다. –

+2

Backticks는 MySQL에서는 문제가 없지만 ANSI-SQL 표준의 일부가 아니므로 다른 데이터베이스 서버에 문제가 발생할 수 있습니다. –