Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NoMethodError after running successful 'create' action

I am sending a post request to my API which works fine, it creates a new record. However, after the record is created i get this error in the server log

NoMethodError (undefined method `device_url' for #<Api::V1::DevicesController:0x007fa2f5dde5d8>):app/controllers/api/v1/devices_controller.rb:14:in `create'

This is my create action

def create
    respond_with Device.create(params[:device])
end

All my resources are namespaced under Api#V1, here is my routes file

# Api ('/api')
namespace :api do
    # Version 1 ('/api/v1')
    namespace :v1 do
        # Locations ('/api/v1/locations')
        resources :locations
        # Videos ('/api/v1/videos')
        resources :videos
        # Devices ('/api/v1/devices')
        resources :devices
    end
end
like image 774
Drazen Avatar asked Mar 16 '12 22:03

Drazen


1 Answers

For a HTML POST request, after successfully creating the object, respond_with redirects to the object's path, i.e. here it would be equivalent to something like

redirect_to Device.create(params[:device])

which redirects to device_url. But since you have namespaced :devices in your routes, you need to specify that to your respond_with call, which would be

respond_with :api, :v1, Device.create(params[:device])
like image 82
Dipil Avatar answered Oct 12 '22 13:10

Dipil