programing

레일에서 뷰를 사용하여 JSON을 렌더링하려면 어떻게 해야 합니까?

codeshow 2023. 3. 18. 09:10
반응형

레일에서 뷰를 사용하여 JSON을 렌더링하려면 어떻게 해야 합니까?

사용자 컨트롤러에서 show request에 대한 json 응답을 얻으려면 views/users/dir에 show.json이라는 이름의 파일을 만들고 사용자 #show 액션이 완료되면 파일이 렌더링됩니다.

현재 다음과 같은 작업을 수행해야 합니다.

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

이렇게 하면 많은 슬픔을 덜 수 있고 컨트롤러에서 아들을 렌더링할 때 느끼는 끔찍하고 더러운 느낌을 씻어낼 수 있을 거야

이런 걸 할 수 있을 거예요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 %>
}

(2023년 1월 23일 편집)

다른 사용자가 언급했듯이 사용자/show.json 뷰가 필요하지만 템플릿 언어에는 고려해야 할 옵션이 있습니다.

ERB

바로 사용할 수 있습니다.HTML에는 매우 좋지만, JSON에 있어서는 매우 곤란하다는 것을 금방 알 수 있습니다.

라벨

좋은 해결책입니다.의존관계를 추가하고 DSL을 익혀야 합니다.

JSON 빌더

RABL과 같은 조건: 좋은 솔루션.의존관계를 추가하고 DSL을 익혀야 합니다.

플레인 루비

Ruby는 JSON 생성에 뛰어나고, 당신이 부를 수 있는 새로운 것은 아무것도 없다.to_jsonHash 또는 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은 보석 또는 GitHub 저장소를 통해 이용할 수 있습니다.좋은 예도 있습니다.

https://github.com/nesquena/rabl

이 페이지에 게재되는 다른 사용자를 위해 이 답변을 갱신합니다.

3에서는 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

RoR에 처음 와봤는데 이게 내가 알아낸 거야.json 형식을 직접 렌더링할 수 있습니다.

def YOUR_METHOD_HERE
  users = User.all
  render json: {allUsers: users} # ! rendering all users
END

RoR부터 시작하는데, 혹시 그게 아니라면 사과드립니다.이 방법을 찾았습니다.이 방법이 https://guides.rubyonrails.org/v5.1/layouts_and_rendering.html#using-render에서 설명한 가장 간단한 방법일 가능성이 있습니다.

2.2.8 JSON 렌더링

렌더링하는 오브젝트에 대해 to_json을 호출할 필요는 없습니다.:json 옵션을 사용하면 렌더가 자동으로 to_json을 호출합니다.

당신이 해야 할 일은 이것뿐입니다.

respond_to do |format| 
        format.html
        format.atom
        format.json { render json: @user }
end 

또한 ./users/1/custom_action.json에서 json 응답을 렌더링합니다.

언급URL : https://stackoverflow.com/questions/2088280/in-rails-how-do-you-render-json-using-a-view

반응형