사용자 컨트롤러에 있고 쇼 요청에 대한 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에는 끔찍한 것이 있습니다.
좋은 해결책입니다. 의존성을 추가하고 DSL을 배워야합니다.
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 리포지토리를 확인하십시오. 좋은 예도
답변
이 페이지에서 끝나는 다른 사람들을 위해이 답변을 업데이트하십시오.
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 %>