我试图开始使用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:
我收到了这个错误:
未初始化的常量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
答案 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
请注意您目前缺少的vacation
和applications
之间的下划线。
您还没有分享您的文件名,只是为了添加到这一点:
pascal类名和snake case之间的匹配对于您的文件名是相同的,对于此资源,它将是vacation_applications_controller.rb
。
此外,由于此类是命名空间的,因此它应位于admin
文件夹中的controllers
文件夹中(如果尚未):
应用/控制器/管理/ vacation_applications_controller.rb 强>