[ruby-on-rails] Rails에서 뷰를 사용하여 JSON을 어떻게 렌더링합니까?

사용자 컨트롤러에 있고 쇼 요청에 대한 json 응답을 원한다고 가정하면 show.json이라는 views / users / dir에서 파일을 만들 수 있다면 좋을 것입니다. 작업이 완료되면 파일이 렌더링됩니다.

현재 다음 라인을 따라 무언가를 수행해야합니다.

def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json{
      render :json => @user.to_json
    }
  end
end

그러나 show.json 파일을 만들어 자동으로 렌더링되는 것이 좋을 것입니다.

def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json
  end
end

이것은 나에게 많은 슬픔을 저장하고 컨트롤러에서 내 json을 렌더링 할 때 얻는 끔찍한 더러운 느낌을 씻어 낼 것입니다.



답변

respond_to블록 에서 다음과 같은 작업을 수행 할 수 있어야합니다 .

respond_to do |format|
    format.json
    render :partial => "users/show.json"
end

에서 템플릿을 렌더링합니다 app/views/users/_show.json.erb.


답변

뷰 추가 시도 users/show.json.erb이것은 JSON 형식을 요청할 때 렌더링되어야하며 erb에 의해 렌더링되는 이점도 추가되므로 파일은 다음과 같습니다.

{
    "first_name": "<%= @user.first_name.to_json %>",
    "last_name": "<%= @user.last_name.to_json %>"
}


답변

다른 사람들이 언급했듯이 users / show.json보기가 필요하지만 템플릿 언어에 대해 고려해야 할 옵션이 있습니다 …

ERB

기본적으로 작동합니다. HTML에는 적합하지만 JSON에는 끔찍한 것이 있습니다.

RABL

좋은 해결책입니다. 의존성을 추가하고 DSL을 배워야합니다.

JSON 빌더

RABL과 같은 거래 : 좋은 해결책. 의존성을 추가하고 DSL을 배워야합니다.

평범한 루비

Ruby는 JSON을 생성 to_json하는 데 뛰어나고 Hash 또는 AR 객체를 호출 할 수 있으므로 배울 것이 없습니다 . 이니셜 라이저에서 템플릿의 .rb 확장자를 등록하기 만하면됩니다.

ActionView::Template.register_template_handler(:rb, :source.to_proc)

그런 다음 users / show.json.rb보기를 작성하십시오.

@user.to_json

이 방법에 대한 자세한 내용은 http://railscasts.com/episodes/379-template-handlers를 참조하십시오.


답변

RABL은 아마도 ERb 구문에 대한 더 확실한 대안을 찾고 있다면 내가 본 가장 좋은 해결책 일 것입니다. 다른 솔루션 인 json_builder 및 argonaut는 다소 구식으로 보이며 일부 패치가 없으면 Rails 3.1에서 작동하지 않습니다.

RABL은 gem을 통해 사용 가능하거나 GitHub 리포지토리를 확인하십시오. 좋은 예도

https://github.com/nesquena/rabl


답변

이 페이지에서 끝나는 다른 사람들을 위해이 답변을 업데이트하십시오.

Rails 3에서는에 파일을 만들면됩니다 views/users/show.json.erb. @user객체는 뷰에 사용할 수 있습니다 (이 HTML에 대한 것처럼.) 당신은 필요가 없습니다 to_json더 이상.

요약하면, 그것은 단지

# users contoller
def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json
  end
end

/* views/users/show.json.erb */
{
    "name" : "<%= @user.name %>"
}


답변

show.json.erb내용으로 파일을 추가 하십시오.

<%= @user.to_json %>

때로는 컨트롤러에서 사용할 수없는 추가 도우미 메서드, 즉 image_path(@user.avatar)JSON에서 추가 속성을 생성 하는 데 필요한 메서드가 필요할 때 유용합니다 .

<%= @user.attributes.merge(:avatar => image_path(@user.avatar)).to_json %>


답변

이것은 잠재적으로 ERB보다 더 나은 옵션이며 더 빠릅니다. https://github.com/dewski/json_builder