IT박스

Rails에서 뷰를 사용하여 JSON을 어떻게 렌더링합니까?

itboxs 2020. 7. 10. 08:10
반응형

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

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

반응형