Tôi đang xây dựng một API json đơn giản trong Rails 3.1. Tôi tạo ra một bộ điều khiển có hai chức năng:Rails respond_with hành động khác nhau trong chỉ mục và tạo phương thức
class Api::DogsController < ActionController::Base
respond_to :json, :xml
def index
respond_with({:msg => "success"})
end
def create
respond_with({:msg => "success"})
end
end
Trong routes.rb Tôi có
namespace :api do
resources :dogs
end
Khi tôi thực hiện một yêu cầu get để http://localhost:3000/api/dogs tôi nhận được json đúng từ trên cao. Khi tôi thực hiện một đường bưu điện đến địa chỉ đó, tôi nhận được một đường ray ngoại lệ:
ArgumentError in Api::DogsController#create
Nil location provided. Can't build URI.
actionpack (3.1.0) lib/action_dispatch/routing/polymorphic_routes.rb:183:in `build_named_route_call`
actionpack (3.1.0) lib/action_dispatch/routing/polymorphic_routes.rb:120:in `polymorphic_url'
actionpack (3.1.0) lib/action_dispatch/routing/url_for.rb:145:in `url_for'
Nhưng nếu tôi thay đổi mã tạo để
def create
respond_with do |format|
format.json { render :json => {:msg => "success"}}
end
end
nó trả về json tốt.
Ai đó có thể giải thích những gì đang xảy ra ở đây?
Đặt vị trí thành chuỗi chữ "nil" đã hoạt động: 'respond_with ({: error =>" bad "},: status => 401,: location =>" nil ")' –
@kwbeam Tôi đã nói về một giá trị nil thực tế trong đoạn cuối (tôi nhận ra rằng các dấu ngoặc kép có thể gây hiểu nhầm) – Aubergine
Tôi đã nghĩ rằng bạn có nghĩa là không phải là đối tượng, không phải là chuỗi chữ, nhưng khi tôi thử nó, nó vẫn thất bại. Tuy nhiên, tôi chỉ cần thay đổi nó trở lại để nil (đối tượng, không phải là chuỗi chữ) và nó đang làm việc. Vì vậy, dường như tôi đã thất bại ở đâu đó, nhưng tôi không thể tái tạo lại những gì tôi đã làm sai. Xin lỗi vì sự nhầm lẫn. (Tôi đã cập nhật phiên bản của Rails và nhiều viên đá quý trong thời gian tạm thời, vì vậy có lẽ đã có một lỗi đã được sửa ... nhưng tôi không chắc chắn) –