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에는 끔찍한 것이 있습니다.
좋은 해결책입니다. 의존성을 추가하고 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
For more info on this approach see http://railscasts.com/episodes/379-template-handlers
RABL is probably the nicest solution to this that I've seen if you're looking for a cleaner alternative to ERb syntax. json_builder and argonaut, which are other solutions, both seem somewhat outdated and won't work with Rails 3.1 without some patching.
RABL is available via a gem or check out the GitHub repository; good examples too
https://github.com/nesquena/rabl
Just to update this answer for the sake of others who happen to end up on this page.
In Rails 3, you just need to create a file at views/users/show.json.erb
. The @user
object will be available to the view (just like it would be for html.) You don't even need to_json
anymore.
To summarize, it's just
# users contoller
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json
end
end
and
/* views/users/show.json.erb */
{
"name" : "<%= @user.name %>"
}
Just add show.json.erb
file with the contents
<%= @user.to_json %>
Sometimes it is useful when you need some extra helper methods that are not available in controller, i.e. image_path(@user.avatar)
or something to generate additional properties in JSON:
<%= @user.attributes.merge(:avatar => image_path(@user.avatar)).to_json %>
This is potentially a better option and faster than ERB: https://github.com/dewski/json_builder
Im new to RoR this is what I found out. you can directly render a json format
def YOUR_METHOD_HERE
users = User.all
render json: {allUsers: users} # ! rendering all users
END
참고URL : https://stackoverflow.com/questions/2088280/in-rails-how-do-you-render-json-using-a-view
'IT박스' 카테고리의 다른 글
svn 원격 저장소 URL을 얻는 방법? (0) | 2020.07.10 |
---|---|
Kotlin과 Java의 String []은 무엇입니까? (0) | 2020.07.10 |
Junit : 분할 통합 테스트 및 단위 테스트 (0) | 2020.07.10 |
PHP 스크립트를 독립형 Windows 실행 파일로 변환 (0) | 2020.07.10 |
java String.split ()의 효과를 되 돌리는 방법은 무엇입니까? (0) | 2020.07.10 |