나는이 같은 방법을 정의하여 액티브 모델에 사용자 지정 정렬을 추가했습니다 :기본 논리 정렬이
class MyClass < ActiveRecord::Base
belongs_to :parent_model #this would be the many in a has_many relationship
def <=>(other)
self.att <=> other.att
end
end
이 말을 충분을 실제로 비교에 사용되는 논리입니다 이 예제보다 조금 더 복잡하고 SQL을 사용하여 수행 할 수있는 작업이 아닙니다.
이 클래스는 포괄 모델의 중첩 필드로만 사용되므로 결과 세트를 정렬 할 수있는 간단한 공간이없는 것처럼 보입니다. 컨트롤러에서 : my_class는 eager loading을위한 include의 일부이지만 뷰 (form.fields_for : my_class)를 수행 할 때까지는 객체 배열을 가지고 다른 작업을 수행하지 않습니다. 필자가 정말로 원하는 것은 논리적 정렬을 사용하여 default_scope에 해당하는 작업을 수행 할 수있게하는 것이지만 가능하다고는 생각하지 않습니다. 지금 당장 내 유일한 옵션은이 결과에 정렬을하기 위해 컨트롤러에 여분의 줄을 추가하는 것 같지만 그렇게하는 것이 옳은 것처럼 보이지 않습니다.
내가 여기에 뭔가 더 우아한가요?
이 방법이 훨씬 쉽고 DRY 것 컨트롤러에서 정렬하는 것보다 그러나 그것은 컨트롤러에서 정렬의 동일한 문제가 있습니다. 즉, 큰 세트의 계산 시간/메모리 사용량 및 합병증 w.r.t. 선택된 행의 수를 제한합니다. 그런 다음 다시 특정 관계에서 문제가되지는 않습니다. – EmFi
나는 여러 가지 변형을 시도했는데, 특정 상황의 상황을 고려할 때 내가 찾고있는 것이 더 많다. 그러나 기본적으로 블록을 실행하는 방법의 도약을 할 수는 없습니다. 나는 익명의 협회와 함께 일한 적이 없다. 실제로 이해하기에 충분하다 - 명백한 것 이상 - 어떻게 작동하는지, 나는 생각한다. 그래도 제안에 감사드립니다. – tmo256