2014-04-08 13 views
26

Trong ứng dụng đường ray của tôi, tôi có một yêu cầu ajax đến máy chủ, để lưu trữ một số dữ liệu. Này được sử dụng để làm việc mà không cần bất kỳ vấn đề, nhưng bây giờ tôi nhận được một lỗi:ActionController :: UnknownFormat

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

Như Sau đây là bộ điều khiển và tập tin javascript tôi, nơi tôi khai báo kiểu dữ liệu gì được 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 toàn 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) 
+1

Bạn có thể chia sẻ các bản ghi máy chủ hoàn tất khi bạn nhận được lỗi này? –

+0

vừa thêm Kirti! – tvieira

Trả lời

38

Cập nhật các create hành động như sau:

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 phương pháp respond_to nhưng anot xác định định dạng trong đó một trang new được trả lại. Do đó, lỗi ActionController::UnknownFormat.

+0

chính xác, dường như anh ta không lưu trên cơ sở dữ liệu (nếu @ reservation.save trả về false) nhưng tôi không còn nhận được lỗi – tvieira

+0

Yup..bạn sẽ gặp lỗi khi '@ reservation.save' bị lỗi như trong trường hợp đó' phần khác' được thực thi khi thiếu định dạng. –

+0

nhưng nó sẽ xảy ra ngay cả với 'format.all' – Dorian

1

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

sau đó tôi nhận được một lỗi khác nhau (xem dưới đây)

Bộ điều khiển cấp respond_to' feature has been extracted to the responders` đá quý. Thêm nó vào Gemfile của bạn để tiếp tục sử dụng tính năng này: gem 'responders', '~> 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ì đến nó.

+0

Kiểm tra điều này, http://stackoverflow.com/a/27907829/2244502 – tvieira

+0

Đó là các thẻ tập lệnh bị thiếu trong bố cục của tôi. –

15

Bạn cũng có thể thay đổi config/routes.rb tập tin của bạn như:

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

nào sẽ mặc định định dạng để json. Nó đang làm việc tốt cho 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 giảm các bản sao:

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

với tất cả mọi thứ trên dưới /api sẽ được định dạng là json theo mặc định.

+0

Hoàn hảo. Cảm ơn! –

1

Vấn đề này xảy ra với tôi và sovled bởi chỉ cần thêm

respond_to :html, :json 

để ApplicationController nộp

Bạn có thể Kiểm tra Vạch vấn đề trên Github: https://github.com/plataformatec/devise/issues/2667

+0

Đó không phải là một phương thức mà ApplicationController hiểu được. – Adamantish

+0

@Adamantish bạn có nghĩa là "respond_to" không? bạn có thể kiểm tra liên kết các vấn đề github đính kèm. –

+0

Thật vậy. Có lẽ có một số lý do để làm với các đường ray 5 rằng nó không phải là một phương pháp được công nhận trong bối cảnh đó đối với tôi. – Adamantish

Các vấn đề liên quan