rails 5 api:无法访问端点

时间:2017-12-09 22:50:48

标签: ruby-on-rails ruby api routes ruby-on-rails-5

我试图开始使用rails 5并构建一个API以使用angular来使用它。

我有管理员和员工实体,员工创建vacationApplication请求,管理员接受或拒绝它。

我从管理控制器编写第一个方法开始:索引检索所有未处理的请求。

这是控制器:

class Admin::VacationApplicationsController < ApplicationController

  def index
    @requests = VacationApplication.where("is_treated = 0").order("created_at ASC")
    render json: @requests, status: :ok
  end

  def acceptRequest

  end

  def rejectRequest

  end


end

这是route.rb文件:

Rails.application.routes.draw do
  devise_for :employes
  devise_for :admins

  namespace :admin do
    resources :vacationapplications
    resources :employes
  end


end

启动服务器并导航到此uri:

  

http://localhost:3000/admin/vacationapplications

我收到了这个错误:

  

未初始化的常量Admin :: VacationapplicationsController

这里是rails routes命令输出:

admin_vacationapplications GET /admin/vacationapplications(.:format)admin / vacationapplications #index                            POST /admin/vacationapplications(.:format)admin / vacationapplications #create  admin_vacationapplication GET /admin/vacationapplications/:id(.:format)admin / vacationapplications #show                            PATCH /admin/vacationapplications/:id(.:format)admin / vacationapplications #update                            PUT /admin/vacationapplications/:id(.:format)admin / vacationapplications #update                            删除/admin/vacationapplications/:id(.:format)admin / vacationapplications#destroy

2 个答案:

答案 0 :(得分:0)

尝试:

class Admin::VacationapplicationsController < ApplicationController

而不是

class Admin::VacationApplicationsController < ApplicationController

并且类文件应该命名为:vocationapplications_controller.rb

答案 1 :(得分:0)

通过Rails约定,类名是pascal case(将类名中的每个新“word”大写)。这就是您目前拥有class Admin:VacationApplicationsController的方式。

当您在其他地方引用此类时,例如您的路径文件,您将使用snake case来匹配类名中单词的分隔。因此,您对该资源的路由如下:

resources :vacation_applications

请注意您目前缺少的vacationapplications之间的下划线。

您还没有分享您的文件名,只是为了添加到这一点:  pascal类名和snake case之间的匹配对于您的文件名是相同的,对于此资源,它将是vacation_applications_controller.rb

此外,由于此类是命名空间的,因此它应位于admin文件夹中的controllers文件夹中(如果尚未):

应用/控制器/管理/ vacation_applications_controller.rb