chandradot99
chandradot99

Reputation: 3866

How to handle routes in rails api

I am learning api on rails,and my code is below

routes.rb

require 'api_constraints'

Rails.application.routes.draw do

  devise_for :users

  namespace :api, defaults: { format: :json }, constraints: { subdomain: 'api' }, path: '/' do

    scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
      resources :users, :only => [:show]
    end

  end
end

users_controllers.rb

class Api::V1::UsersController < ApplicationController
  respond_to :json

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

end

when I run the rails server with localhost:3000/users/1 then It gives me the error No route matches Then i checked routes using rake routes and it is included in my routes

`api_user    GET     /users/:id(.:format)     api/v1/users#show'

but i don't know why it gives me the error

api_constraints.rb

class ApiConstraints
  def initialize(options)
    @version = options[:version]
    @default = options[:default]
  end

  def matches?(req)
    @default || req.headers['Accept'].include?("application/vnd.marketplace.v#{@version}")
  end
end

`

Upvotes: 1

Views: 204

Answers (1)

Tom Fast
Tom Fast

Reputation: 1158

Try the following:

api.lvh.me:3000/api/v1/users/1

You've setup a constraint that requires an api sub domain. You'll need to remove the constraint to make the following work:

lvh.me:3000/api/v1/users/1

Note: lvh.me points to 127.0.0.1

Upvotes: 2

Related Questions