2013-02-27 2 views
0

이것은 기본적인 질문처럼 보입니다. 그러나 나는 그것을 얻을 수 없습니다. DB에서 데이터를 가져와 JSON으로 제공합니다. JSON으로 제공하기 전에 배열의 각 해시에 값을 추가하고 싶습니다.활성 레코드 응답 수정

@locations.each do |location| 
    if location[:image].present? 
    location[:convient_new_url_value] = 'http://site.com/#{location.image}.jpg' 
    end 
end 

그러나 해시에 값을 추가 할 수없는 것 같습니다. 잘못된 접근 방식을 취하고 있습니까?

** 죄송합니다 - json으로는 HTML 템플릿에서 만든 **

@locations = Location.find(:all, :order => "created_at") 

@locations.each do |location| 

    if location[:image].present? 
    location[:convient_new_url_value] = 'http://site.com/#{location.image}.jpg' 
    end 
end 

respond_to do |format| 
    format.html 
end 

대한 추가 정보 :

<script> 
    var location_data = <%= raw @locations.to_json() %> 
</script> 
+0

실제로 '위치'가 무엇인지, 그리고 그것이보기에 어떻게 제공되는지 쉽게 볼 수 있습니다. –

+0

더 명확하게하기 위해 수정했습니다 ... – Jim

+0

'locations'는 해시가 아니며 활성 레코드 관계입니다. 해당 컬렉션의 각 개체는 일반 해시가 아닌 AR입니다. AFAIK에는 실제 저작물을 검사하고 그 안에 들어간 특수한 것들을 무시하는 것 외에는 아무 일도 할 수 없습니다. IIRC'[] ='write_attribute'로 해석되었는데, 그 속성이 모델 자체에 실제로 존재하지 않는다면 직렬화 될 것이라고 생각하지 않습니다. –

답변

0

가장 쉬운 방법은 아마 convient_new_url_value에 대한 모델의 방법을 만들 것 to_json에 전달하십시오 :

class Location < ActiveRecord::Base 
    ... 
    def convient_new_url_value 
    "http://site.com/#{self.image}.jpg" if self.image.present? 
    end 
end 

<script> 
    var location_data = <%= raw @locations.to_json(:methods => :convient_new_url_value) %> 
</script> 

컨트롤러가해야 할 일은 ge t 위치는 DB에서 :

@locations = Location.all.order(:created_at)