Helpex - Trao đổi & giúp đỡ Đăng nhập
48

Trong ứng dụng rails của tôi, tôi có một yêu cầu ajax tới máy chủ, để lưu trữ một số dữ liệu. Điều này từng hoạt động mà không có vấn đề gì, nhưng bây giờ tôi gặp lỗi:

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

Như sau là bộ điều khiển và tệp javascript của tôi, nơi tôi khai báo kiểu dữ liệu là JSON

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.js

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

Nhật ký lỗi hoàn chỉnh là:

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)
48 hữu ích 1 bình luận 144k xem chia sẻ
54

Cập nhật createhành động như bên dưới:

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

Bạn đang sử dụng respond_tophương pháp nhưng không chỉ định định dạng mà một newtrang được hiển thị. Do đó, lỗi ActionController::UnknownFormat.

54 hữu ích 3 bình luận chia sẻ
29

Bạn cũng có thể sửa đổi tệp config / route.rb của mình như:

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

Định dạng sẽ mặc định thành json. Nó đang hoạt động tốt đối với tôi trong Rails 4.

Hoặc nếu bạn muốn đi xa hơn nữa và bạn đang sử dụng không gian tên, bạn có thể cắt bớt các phần trùng lặp:

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

với bên trên, mọi thứ bên dưới /apisẽ được định dạng là json theo mặc định.

29 hữu ích 0 bình luận chia sẻ
4

Vấn đề này đã xảy ra với tôi và được giải quyết bằng cách thêm

 respond_to :html, :json

đến tệp ApplicationController

Bạn có thể Kiểm tra sự cố Devise trên Github: https://github.com/plataformatec/devise/issues/2667

4 hữu ích 3 bình luận chia sẻ
3

Có một tình huống khác mà vấn đề này tái tạo (như trong trường hợp của tôi). Khi YÊU CẦU CỦA KHÁCH HÀNG không chứa đúng phần mở rộng trên url, bộ điều khiển không thể xác định định dạng kết quả mong muốn.

Ví dụ: bộ điều khiển được đặt thành respond_to :json(như một tùy chọn duy nhất, không có phản hồi HTML) - trong khi cuộc gọi khách hàng được đặt thành /reservationsthay vì /reservations.json.

Tóm lại, hãy thay đổi cuộc gọi của khách hàng thành /reservations.json.

3 hữu ích 0 bình luận chia sẻ
1

Tôi thích bài viết này vì tôi gặp lỗi tương tự. Vì vậy, tôi đã thêm dòng trên cùng như trong bộ điều khiển của bạn response_to: html,: json

sau đó tôi gặp một lỗi khác (xem bên dưới)

respond_to' feature has been extracted to theĐá quý của người phản hồi cấp bộ điều khiển . Thêm nó vào Gemfile của bạn để tiếp tục sử dụng tính năng này: gem 'responseers', '~> 2.0' Tham khảo hướng dẫn nâng cấp Rails để biết thêm chi tiết. Nhưng điều đó không liên quan gì.

1 hữu ích 1 bình luận chia sẻ
0

Tôi gặp lỗi này khi cố gắng hiển thị phản hồi XML - tôi phải thay đổi tên mẫu của mình từ index.html.erb thành index.xml.erb và sau đó nó hoạt động.

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ ruby ajax ruby-on-rails-4 respond-to , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading