2012-09-07 38 views
9

Tôi đang cố gắng để có được một ứng dụng đường ray chạy với batman.js khuôn khổ node.js thông qua đá quý batman-ray.406 lỗi khi trả lời với json

Khi tôi trả lời bằng json trong bộ điều khiển đường ray, tôi nhận được lỗi 406 mọi lúc, và tôi không biết tại sao. Đây là bộ điều khiển của tôi:

respond_to :json 

    def index 
    respond_with Sample.all 
    end 

Điều này mang lại cho tôi 406 không có vấn đề gì. Tôi không nghĩ rằng điều này có liên quan đến batman, nhưng chính nó. Nhưng để có biện pháp tốt, đây là mã batman của tôi:

index: (params) -> 
    TopNavTemplate.Sample.load (err) -> throw err if err 
    @set 'samples', TopNavTemplate.Sample.get('all') 

Và sau đó tệp index.html.erb của tôi chỉ đơn giản là nói 'chỉ mục', nó chưa thực sự hoạt động với batman.

Có rất nhiều 406 câu hỏi liên quan đến JSON, tôi chưa thực sự áp dụng chúng cho tình huống của mình. Có cái gì tôi đang làm sai để làm cho đường ray respond_with JSON?

Trả lời

24

Alright, tôi đã thực hiện một ứng dụng rất đơn giản để kiểm tra tình hình của bạn:

SamplesController.rb

class SamplesController < ApplicationController 
    respond_to :json 

    def show 
    respond_with Sample.find(params[:id]) 
    end 

    def index 
    respond_with Sample.all 
    end 
end 

Khi tôi đến thăm /samples.jsonsamples/1.json, nó làm việc như dự định. Tuy nhiên, khi tôi truy cập /samples/samples/1 (không có phần mở rộng .json), tôi nhận được lỗi 406.

Để có công việc của URL mà không cần phần mở rộng .json, bạn cần phải sửa đổi tập tin config/routes.rb của bạn như sau:

resources :samples, defaults: {format: :json} 

Nếu không, các ứng dụng Rails sẽ cố gắng để đáp ứng các yêu cầu với một phản ứng HTML .

+0

+1 cảm ơn rất nhiều! –

+2

Tôi chỉ muốn lưu ý cho những người nhìn thấy điều này ngày nay rằng bộ chuyển đổi cửa hàng Rails của Batman hiện nay gắn thêm .json vào tất cả các yêu cầu theo mặc định. – Kombo

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