2016-03-14 18 views
29

Trong ray 5 tạo ra với --api Tôi có một lỗiKhông xác định phương pháp dụ "respond_to" trong Rails 5 Bộ điều khiển API

NoMethodError (undefined method `respond_to' for #<Api::MyController:0x005645c81f0798> 
Did you mean? respond_to?): 

Tuy nhiên, trong tài liệu hướng dẫn cho đường ray 4.2 nó nói http://edgeguides.rubyonrails.org/4_2_release_notes.html

respond_with và đáp ứng cấp lớp tương ứng đã được chuyển sang đá quý của người phản hồi. Thêm đá quý 'đáp ứng', '~> 2.0' để Gemfile của bạn để sử dụng nó:

Instance cấp respond_to không bị ảnh hưởng:

Và tôi gọi phương pháp dụ. Có chuyện gì vậy?

class ApplicationController < ActionController::API 
end 

# ... 
class Api::MyController < ApplicationController 

    def method1 
    # ... 
    respond_to do |format| 
     format.xml { render(xml: "fdsfds") } 
     format.json { render(json: "fdsfdsfd") } 
    end 
+3

"Những gì có chuyện?" - Um, ghi chú phát hành là 4.2 và bạn đang sử dụng 5? –

+0

@ JörgWMittag, chưa có đề cập đến việc thay đổi meme-responds kể từ 4.2 nên nó vẫn rất phù hợp. – max

+0

Bạn có thể muốn thử đá quý đáp ứng. Nó khá tuyệt vời. – max

Trả lời

55

ActionController::API không bao gồm mô-đun ActionController::MimeResponds. Nếu bạn muốn sử dụng respond_to, bạn cần phải bao gồm MimeResponds.

class ApplicationController < ActionController::API 
    include ActionController::MimeResponds 
end 


class Api::MyController < ApplicationController 
    def method1 
    # ... 
    respond_to do |format| 
     format.xml { render(xml: "fdsfds") } 
     format.json { render(json: "fdsfdsfd") } 
    end 
    end 
end 

Nguồn: ActionController::API docs

10

Tính đến Rails 4.2, chức năng này không còn tàu với Rails, nhưng có thể dễ dàng được kèm với phản ứng đá quý (như Max đã nêu trong bình luận ở trên).

Thêm gem 'responders' để Gemfile của bạn, sau đó

$ bundle install 
$ rails g responders:install 

Nguồn:
http://edgeguides.rubyonrails.org/4_2_release_notes.html#respond-with-class-level-respond-to https://github.com/plataformatec/responders

+2

Trích dẫn từ nguồn được liên kết "Phản hồi cấp độ cá nhân_ không bị ảnh hưởng". Nếu như OP của bạn chỉ bằng cách sử dụng cấp cá thể respond_to bạn không cần gem phản ứng, chỉ cần đảm bảo ActionController :: MimeResponds đã được bao gồm trong bộ điều khiển của bạn. – complistic

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