2017-01-28 3 views
0

레일스 활성 레코드 쿼리에 동적 순서 방법을 적용하는 데 문제가 있습니다. 필드 및 방향에 따른 순서는 요청 매개 변수에 따라 동적입니다. 그것들을 문자열로 지정할 때 모호한 필드 이름에서 벗어날 수 있습니다. 기호로 지정할 때 괜찮습니다. 동적으로이 쿼리를 심볼로 만들 수 있습니까?Rails/ActiveRecord 주문 문자열 대 기호와 관련된 문제

이 : SELECT DISTINCT "projects"."id", id AS alias_0 FROM...에서

subject = subject.order('id desc') 

결과와는 PG::AmbiguousColumn: ERROR: column reference "id" is ambiguous 오류가 있습니다.

이 사용하는 문자를 지정

는 액티브 레코드가 올바르게 모호성없이 모두 함께 넣습니다 : 그래서

subject = subject.order(id: :asc) 

어떻게 같은 변환하거나 동적으로이 방법을 사용할 수 있습니다 :

subject = subject.order(params[:order_by] + ' ' + params[:order_direction]) 

사이드 참고 : 쿼리에 다른 곳에서 발생하는 조인과 다른 복잡성이 있습니다 (여러 id 필드). 문제의 원인이 있다고 가정하고 있지만 Active Record라는 기호가 제대로 표시됩니다. 또한 위의 params 예에서 order_byorder_direction은 허용 목록에 포함되므로 SQL 삽입은 문제가되지 않습니다.

답변

1

이 같은 상징하는 키 해시를 만들 수 있습니다

order = {} 
order[params[:order_by].to_sym] = params[:order_direction] 
subject = subject.order(order) 

이가 AmbiguousColumn 오류를 방지 할 수 있는지 확실하지,

+0

이 수행하는 트릭, 감사하지만! – Ryan