2014-09-28 2 views
1

집과 도시/광경을 하나의지도에 표시하고 싶습니다.하나의지도에 모델을 곱하십시오.

내 컨트롤러 :

@house = House.friendly.find(params[:id]) 
    @city = City.find(1) 
    @location = @house.location 
    @location1 = @city.location 

    records = @location || @location1 

@hash = Gmaps4rails.build_markers(records) do |location, marker| 
     marker.lat location.latitude 
     marker.lng location.longitude 

    end 

보기

<header> 
    <h3 class='text'> 
    <%= t('navigation.sub_nav.location') %> 
    </h3> 
<div id="map" style='width: 100%; height: 400px; margin-top: 10px;' ></div> 

<script type=text/javascript> 
    handler = Gmaps.build('Google'); 
    handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){ 
     markers = handler.addMarkers(<%=raw @hash.to_json %>); 
     handler.bounds.extendWith(markers); 
     handler.fitMapToBounds(); 
     handler.getMap().setZoom(7); 
    }); 
</script> 

내가지도가 아닌 도시 만 집을 보여줍니다. 여기서 내가 뭘 잘못하고 있니?

+0

아마도'records = @location + @ location1'이 필요합니다. – Santhosh

답변

2

||records@location1에 할당되는 경우에 닐이되지 않는 이상 records = @location || @location1 수단은, records@location 할당, 또는 의미한다. 그 중 하나가 nil이 될 수 있다는 나타나는

, 내가 가진 그 라인을 교체하는 것이 좋습니다 :

records = [@location, @location1].compact, 둘 다 지정 및 전무 값을 제거 것이다. 이제 Gmaps4rails.build_markers(records)records에 대한 올바른 배열을 수신합니다.

둘 다 비워 둘 수 있다고 예상되는 경우 추가 검사를 추가 할 수 있습니다 (이 경우 빈 배열이 있음).

또한,보기의 나머지가 어떻게 생겼는지에 따라 @house, @city, @location@location1 과도한 범위를 가질 수 있으며, 그들이에서만 사용하는 경우 아마 house, city, locationlocation1로 변경 될 수 있습니다 컨트롤러.

+0

감사합니다! 그것은 작동합니다! – Remco

+0

brad ... 그것은 1 레코드를받을 때 작동합니다. 그러나 @ location1에 다중 레코드 (명소)가있을 때 아무런 메소드 오류도 발생하지 않습니다 ...이 사실을 알고 계십니까? – Remco

+0

@Remco 더 많은 코드를 보지 않고 말하기가 어렵습니다. 이것은 아마도 새로운 질문으로 더 나을 것이지만 나는'[@location, @ location1] .flatten.compact'을 시도해 볼 것입니다. –