2016-08-02 3 views
0

가장 많이 본 21 개의 사진 목록을 검색하려고합니다. 나는 내 컨트롤러에서이 코드를 가지고 :레일스가 잘못된`order` 문을 삽입했습니다.

@photos = Photo.where("group_id = (?)", params[:target_id]).order('view_count ASC').limit(21) 

를하고 다음과 같은 SQL 출력 :

SELECT "photos".* FROM "photos" WHERE group_id = ('205') ORDER BY "photos"."timestamp" DESC, view_count ASC LIMIT 21 

timestamp DESC 쿼리에서 오는을 어떻게 제거합니까? 사진이 조회수 대신 시간순으로 반환됩니다.

+0

체크? – Sravan

답변

3

아마도 Photo 모델에서 default_scope을 사용하고있을 수 있습니다. 그 때문에이라면 사용해보십시오 : 당신이 default scope이있는 경우 무시하거나 그 기본 범위를 제거하는 unscoped를 사용해야합니다

@photos = Photo.unscoped.where("group_id = (?)",params[:target_id]).order('view_count ASC').limit(21) 
2

.

unscoped(): Returns a scope for the model without the previously set scopes.

default_scope(scope = nil) :- Use this macro in your model to set a default scope for all operations on the model.

@photos = Photo.unscoped.where("group_id = (?)", params[:target_id]).order('view_count ASC').limit(21) 

다음 쿼리해야 , 어떤 기본 범위가 작성된 경우

SELECT "photos".* FROM "photos" WHERE group_id = ('205') ORDER BY "photos"."view_count" ASC LIMIT 21 
관련 문제