2012-06-25 2 views
1

현재 json 출력은 "id": 3, "name": "test"이고 3을 "3"으로 지정해야합니다.레일이있는 json의 ID에 따옴표를 추가하십시오.

레일에서 어떻게해야합니까? 이 같은

def search 
    @tags = Tag.where("name like ?", "%#{params[:q]}%") 
    respond_to do |format| 
     format.json { render :json => @tags.to_json(:only => [:id, :name]) } 
    end 
    end 
+0

가 왜' "3"'일하기 위해'3'이 필요합니까 : –

+0

또 다른 플러그인이 깨져서 – Tallboy

+0

다른 플러그인은 무엇입니까? 다른 플러그인을 수정 해 보셨습니까? –

답변

0

이 나를 위해 일한 유일한 솔루션이었다?
1

뭔가 :

format.json do 
    tags = @tags.to_json(:only => [:id, :name]) 
    render :json => tags.map{|t| t['id'] = t['id'].to_s; t} 
end 
+0

인수가 너무 적음 – Tallboy

+0

@Tallboy, 무슨 뜻인가요? –

+0

로드 할 때 "너무 적은 인수"오류가 발생합니다. app/controllers/tags_controller.rb : 9 : 형식 : app/controllers/tags_controller.rb : 9 : 검색 : – Tallboy

2

세르지오의 솔루션이 작동합니다. 그러나 여러 곳에서이 작업을 수행하는 경우 Rails의 내장 함수 인 as_json을 재정의 할 것을 제안합니다. 당신의 Tag 모델에서

:

def as_json(options={}) 
    options[:id] = @id.to_s 
    super(options) 
end 

컨트롤러 방법은 변경되지 않습니다. 이것은 테스트되지 않았지만 작동해야합니다.

def search 
    @tags = Tag.where("name like ?", "%#{params[:q]}%") 
    respond_to do |format| 
     format.json { render :json => @tags.map {|t| {:id => t.id.to_s, :name => t.name }} } 
    end 
    end