2012-12-06 3 views
0

JSON을 자바 스크립트 함수에 제공하는 컨트롤러 액션 중 하나에 AJAX 요청을 보내고 있습니다. 자바 스크립트 함수는 내보기 내부의 데이터를 기반으로 svg를 생성합니다.레일 패스 ActiveRecord :: 관계 내부 파라미터들?

그러나 내가 사용하고있는 데이터는 뷰 내부의 테이블 내에서 표현되어야하며 쿼리가 데이터베이스에 대해 한 번 이상 실행되어야하므로 쿼리를 원한다면 궁금합니다. 가능하면 페이지에 대한 초기 요청에 대한 쿼리를 수행 한 다음 params 해시에서 AJAX를 사용하여 다른 컨트롤러에 전달할 수 있습니까?

는 현재의 작업 흐름을 heres 개요 문제를 단순화하기 위해 : -> 쿼리 ->보기 봉사 -> 쿼리 - -> AJAX는 요청을 GET

페이지 요청

SVG 생성> 무엇 내가 원하는 :

페이지 요청 -> 쿼리 ->보기 봉사 -> AJAX는 GET 요청이 -> 내가 단순히 통과 수 있다고 생각 SVG에게

생성

"#<ActiveRecord::Relation:0x00000009137fc8>":String 

나는 또한 세션으로 저장 시도, 예를 들면 :

session[:foo] = @bar 
Ajax 요청에 PARAM하지만 대신 액티브로 관계를 통과의 관계 : 관계는 문자열로 전달

하지만 세션을 관계를 저장할 수 없다고 생각하는 다음 오류 메시지를 만났습니다.

기본 PROC

워크 플로우 이런 종류의 선호되는 솔루션은 무엇과 해시를 덤프 수없는 이유는 무엇입니까?

답변

1

ActiveRecord::Relation은 내부 레일 객체이며 JavaScript의 "외부 세계"가 아는 것이 아닙니다. (이론적으로, 그것을 serialize하고 deserialize 할 수는 있지만 그것은 단지 나쁜 생각이다. 따라서 올바른 방법이 아닙니다. 세션에서 ActiveRecord :: Relation이 아닌 쿼리의 결과 인 객체 자체를 저장할 수 있지만 일반적으로 좋은 방법은 아닙니다.

그렇다면 원하는 것을 어떻게 달성 할 수 있습니까?

먼저 레일스는 대부분의 데이터베이스 쿼리를 캐시하는 경향이 있으므로 어떤 것을 최적화하기 전에 최적화가 필요한지 확인하십시오.

그렇다고 가정하면 쿼리의 결과를 표시 한 다음 SVG를 생성하는 다른 요청 (AJAX 요청)을 만드는 것과 같은 두 가지 작업을 수행하는 것처럼 보입니다. 이 두 가지 완전히 다른 방법 (음, 어떤면에서는 분명히 관련됨)이 아니라 형식이 다르며 다른 시간에 실행됩니다. 이것은 두 가지 다른 방법을 제안합니다.

정말 가까이에 있다면 (즉, 첫 번째보기에서 필요한 것의 90 %를 차지하는 경우) 숨겨진 필드 또는 표시되지 않은 값을 첫 번째보기 및 JS에서 발생시키는 JS에 추가 할 수 있습니다 AJAX는 SVG를 생성하는 데 필요한 값을 페이지 (DOM)에 쿼리합니다.

어떤 경우에는 사람들이 HTML에서 data- 속성을 사용하여 JS를 통해 쉽게 액세스 할 수있는 더 구조화 된 형식으로 속성 값을 보유하고 전체 객체를 효과적으로 HTML의 표시되지 않은 데이터로 직렬화하는 것을 보았습니다.

그러나이 작업을 수행하기 전에, 당신이

0

이 작업을 수행 할 수 있습니다 :-) 최적화 필요가 뭔가 최적화하고 있는지 확인 :

VAR 관계 = '<퍼센트 = @ criteria.where_values_hash.to_json합니다. html_safe %> '

그런 다음 "data"의 ajax 요청에이 관계 var를 보낼 수 있습니다.