programing

액션 컨트롤러:알 수 없는 형식

css3 2023. 3. 21. 22:27

액션 컨트롤러:알 수 없는 형식

내 rails 앱에서 서버에 데이터를 저장하기 위한 Ajax 요청이 있습니다.이것은 이전에는 문제없이 동작했지만, 지금은 에러가 표시됩니다.

ActionController::UnknownFormat (ActionController::UnknownFormat):
  app/controllers/reservations_controller.rb:45:in `create'

데이터형이 JSON임을 선언한 컨트롤러와 javascript 파일은 다음과 같습니다.

class ReservationController < ApplicationController

  respond_to :html, :json

  def create
    ...
    respond_to do |format|
      if @reservation.save
        format.html do
          redirect_to '/'
        end
        format.json { render json: @reservation.to_json }
      else
        render 'new'
      end
    end # respond_to
  end # create 
end # ReservationController

function.discloss.discloss 。

$.ajax({
        url: url_link,
        dataType: 'json',
        type: 'POST',
        data: dataToSend
      })

완전한 에러 로그는, 다음과 같습니다.

Completed 406 Not Acceptable in 45ms

ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/bookings_controller.rb:45:in `create'

Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.5ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.8ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.8ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (9.6ms)

의 갱신create다음과 같은 액션:

def create
  ...
  respond_to do |format|
    if @reservation.save
      format.html do
        redirect_to '/'
      end
      format.json { render json: @reservation.to_json }
    else
      format.html { render 'new'} ## Specify the format in which you are rendering "new" page
      format.json { render json: @reservation.errors } ## You might want to specify a json format as well
    end
  end
end

사용하고 있습니다.respond_tomethod. 단, a의 포맷을 지정하는 것은 아닙니다.new페이지가 렌더링 됩니다.그 때문에, 에러입니다.ActionController::UnknownFormat.

config/routes.rb 파일을 다음과 같이 변경할 수도 있습니다.

 get 'ajax/:action', to: 'ajax#:action', :defaults => { :format => 'json' }

기본 포맷은 json입니다.레일 4에서는 잘 작동하고 있습니다.

또는 더 나아가 네임스페이스를 사용하는 경우 중복되는 부분을 줄일 수 있습니다.

namespace :api, defaults: {format: 'json'} do
   #your controller routes here ...
end

상기의 모든 것을 아래에 두고/api디폴트로는 json으로 포맷됩니다.

이 문제가 재현되는 다른 시나리오가 있습니다(저의 경우와 같습니다).CLIENT REQUEST가 URL에 올바른 확장자를 포함하지 않으면 컨트롤러가 원하는 결과 형식을 식별할 수 없습니다.

예를 들어 컨트롤러는 다음과 같이 설정됩니다.respond_to :json(HTML 응답 없음) 클라이언트콜이 로 설정되어 있는 동안/reservations대신/reservations.json.

요컨대 클라이언트콜을 다음으로 변경합니다./reservations.json.

이 문제는 나에게서 일어났고 그냥 add로 해결되었다.

 respond_to :html, :json

Application Controller 파일로 전송

Github에서 Gand 문제를 확인할 수 있습니다.https://github.com/plataformatec/devise/issues/2667

음, 저는 비슷한 오류가 있어서 이 게시물을 좋아한다.그래서 당신의 컨트롤러 response_to:html,:json과 같은 맨 위 행을 추가했습니다.

다른 에러가 발생했습니다(아래 참조).

컨트롤러 레벨respond_to' feature has been extracted to the응답자의 보석이 기능을 계속 사용하려면 Gem 파일에 추가하세요: gem 'responsers', '~> 2.0' 자세한 내용은 레일 업그레이드 가이드를 참조하십시오.하지만 그건 아무 상관 없어요

XML 응답을 렌더링하려고 할 때 이 오류가 발생했습니다.- 템플릿 이름을 index.html.erb에서 index.xml.erb로 변경했는데 동작했습니다.

스코프에 //가 없기 때문에 수정되었습니다(json 에러가 표시됨).

Rails.application.routes.draw do
  scope '(:base_url)', base_url: #{ENV.fetch('BASE_URL').to_s} do
    ...
  end
end

이(필수) 대신

Rails.application.routes.draw do
  scope '(:base_url)', base_url: /#{ENV.fetch('BASE_URL').to_s}/ do
    ...
  end
end

언급URL : https://stackoverflow.com/questions/22943892/actioncontrollerunknownformat