문제

내가 하려고 함께 넣어 몇 가지 기본적인 보고서 화면이 있습니다.는데 상당히 복잡한 SQL 쿼리를 내가 먹이로 ActiveRecord 의 find_by_sql 방법입니다.문제는 나는 여기에는 이를 잃고 열의 순서에 주어진 원래의 쿼리가 있습니다.나는 가정이기 때문에 해쉬하지 않는 클래스를 보존 항목의 순서로 그 키를 사용합니다.

제를 해결할 방법이 있습니까 이 문제가?해야 하는 다른 방법을 사용하여 다음 find_by_sql 에 대한 쿼리를 내?

도움이 되었습니까?

해결책

당신이 올바른에 있는 루비 해시지 않을 보존하기 위해.는 일부의 지점이 정말-당신은에 액세스를 사용하여 핵심입니다.

나는 가정의 쿼리가 기록을 제공하는 열이는 순서대로 출력하려는 그들은 당신의 값을 출력을 통해 루프?는 것처럼 괜찮은 충분한 생각,그러나 나는 생각할 수 없을 달성하는 방법을없이 적어도 몇 가지 여분의 작동합니다.

내가 권하고 싶은 명시적으로 접근 열에 의해 키 템플릿에서 때문에,당신은 아마 가고 끝까지 스타일을 적용하여 포맷을 사용하여 도우미 기능은 다음과 같 number_with_delimiter,는 종류의 것입니다.

뭔가를 얻기 위해 다음과 같 바로 위에서 언급한 내 생각을 만들 수 있습 배의 기호는 필요한 순서대로 끌어 값은 해쉬에 있습니다.무언가가 이것을 좋아하는가?(주시기 바랍 변명은 잠재적으로 위태로운 erb:나 haml 사용자!)

<% for row in @report.rows %>
    <tr>
    <% for col in [:a, :b, :c] %>
        <td><%= row[col] %></td>
    <% end %>
    </tr>
<% end %>

다른 팁

나는 사용하는 것을 좋아한다 루트 보고를 위해. ActiveRecord 통합이 우수하며 열 순서 및 거의 모든 것을 제어 할 수 있습니다. 그리고 "기본"보고서에도 과잉을 고려하지 않기 때문에 사용하기에 충분히 간단합니다.

레일 3.2 이상에서 사용할 수 있습니다 attribute_names 각 레코드에 대해 find_by_sql 결과. 이것은 문서화되어 있습니다 find_by_sql:

데이터베이스에 대해 사용자 정의 SQL 쿼리를 실행하고 모든 결과를 반환합니다. 결과는이 메소드를 부르는 모델의 속성으로 캡슐화 된 열이 캡슐화 된 배열로 반환됩니다. 전화하면 Product.find_by_sql 그런 다음 결과는 a로 반환됩니다 Product SQL 쿼리에 지정된 속성이있는 개체.

여러 테이블에 걸쳐 복잡한 SQL 쿼리를 호출하는 경우 SELECT에서 지정된 열은 해당 테이블의 열인지 여부에 관계없이 모델의 속성입니다.

모델의 경우 column_names를 사용할 수 있습니다. 변형에 대한 자세한 내용은 다른 SA 답변을 참조하십시오. 레일에서 모델 속성을 어떻게 발견합니까?

이 "보고서 화면"을 어떻게 만들고 있습니까? ERB 템플릿입니까? 당신은 단지 칼럼에서. 모든 것을 인쇄하기 위해 전화를 걸고 있습니까?

이 경우 모델의 열 () 메소드를 대체하여 순서 배열을 반환 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top