0

나는 레스토랑에서 온라인으로 메뉴를 만들 수있는 레스토랑을 만들고 있습니다. 지금 우리 페이지는 초기 페이지로드시 6 개의 항목을로드하고 페이지를 계속 스크롤하면서 AJAX를 통해 6 개의 항목을 동적으로로드 할 때 무한 스크롤 상호 작용이 처리됩니다.json으로 열을 제한하는 레일 연결을 얻을 수 없습니다.

모든 것이 작동하지만 내 데이터베이스 연결 필드를 제한하는 데 문제가 있습니다. 내가 사용하는, 예를 들어, 내 항목

has_many :sizes 

과 항목 모델 년에 설립되어 자신의 크기를 가지고 다음 나는 JSON을 통해 수익을 내 데이터를 구성

item.sizes 

를 사용하는 크기에 액세스 다음의 방법 (나는이 방법의 개선에 매우 환영입니다 있지만) :

items = Item.where("blah blah") 
items.each do |item| 
    item[:sizes] = item.sizes 
end 

render :json => {:items => items} 

이 모든 작동 충분히 간단하지만, 내가 선택한 열 retur 제한하려고 할 때 데이터베이스에서 네드, 나는 이상한 행동을 시작합니다. 나는 그것을 일으키는 것이 확실하지 않습니다.

item[:sizes] = item.sizes.select("id, name, price") 

내가 시도뿐만 아니라이 일을 : 나는이 일을 시도했다

item[:sizes] = item.sizes.to_json(:only => [:id, :name, :price]) 

이러한 방법 모두 서버 측에만 요청 된 필드를 반환하는 작동하지만 일이 일어날 것 같다 요청과 웹 브라우저로 돌아 오는 사이에 (내 추측에 따르면 렌더링 메서드로 인해 발생 함) 내 고유 한 필드 선택기를 실행 취소하고 모든 데이터베이스 데이터를 다시 보내는 것처럼 보입니다. 따라서 ID 대신, 이름, 가격, 약 20 개의 불필요한 데이터 필드를 받고 있습니다).

이 작품을 만드는 데 도움이되는 제안 사항이 있습니다. 또한 누군가가 쿼리 시간을 향상시키는 방법에 대한 다른 정보가 있으면 크게 도움이 될 것입니다. 나는 이미 모든 기본적인 튜토리얼을 다루었으며, 이미 항목에 액세스하기 전에 열심히 로딩을 사용하고있다. (내 문제와 관련이 있는지 궁금해한다.) 병목 현상이 발생하지 않도록 좋은 해결책을 찾고있다. 다음 to_json 및 render : json 메소드를 사용하십시오.

현재 데이터베이스에서 약 400ms가 걸리는 일련의 쿼리는 렌더링에서 추가로 1000ms가 소요됩니다. json.

답변

1

이 같은 render 방법에 매개 변수를 전달하여 요소를 제한해야합니다 :

render :json => items.to_json(:include => { :sizes => { :only => [:id, :name, :price] }} 

이 당신을 위해 그것을해야한다.

+0

대단히 감사합니다! 마침내 열을 제한 할 수있게되었습니다. 이상하게도 렌더링 외부에서 .to_json 메서드를 실행하면 작동하지 않는 것 같습니다. 이것은 나에게 정말로 이상한 행동이다. –

+0

이것이 실제로 문제를 해결해 주었지만 더 나은 방법이 있는지 궁금합니다. 내 로그를 주시하면서 쿼리가 70ms 만 소요되고보기에는 2ms 밖에 걸리지 않지만 총 요청 시간은 거의 1500ms입니다. 이 요청에는 그 밖의 많은 일이 일어나지 않으므로 .to_json 메서드에서 오는 것으로 느낍니다. 어떤 아이디어? –

+0

귀하의 응용 프로그램이 개발 모드입니까? – davidb