액션 컨트롤러:알 수 없는 형식
내 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_to
method. 단, 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
'programing' 카테고리의 다른 글
Chrome 개발자 도구에 반응 탭이 표시되지 않음 (0) | 2023.03.21 |
---|---|
LogStash에서의 JSON 사용 (0) | 2023.03.21 |
스프링 부트 Mongo Repository 유닛 테스트 방법 (0) | 2023.03.21 |
스프링 - 여러 스프링 데이터 모듈이 발견되어 엄격한 저장소 구성 모드로 들어갑니다. (0) | 2023.03.21 |
Amazon Cloudfront 비용을 절감하는 방법 (0) | 2023.03.21 |