Rails 和 Devise - 命名空间是未初始化的常量
我正在尝试使用命名空间来声明 api。
我的routes.rb包含:
devise_scope :user do
namespace :api do
namespace :v1 do
match 'log_in', :to => 'token_authentications#log_in', :via => "post"
end
end
end
并且我的*token_authentications_controller.rb*看起来像这样:
class Api::V1::TokenAuthenticationsController < ApplicationController
...
def log_in
...
end
...
end
当我点击:api/v1/log_in时,我得到:
路由错误
未初始化的常量 Api
那么我需要在某处声明命名空间吗?
I am trying to use namespaces to declare an api.
My routes.rb contains:
devise_scope :user do
namespace :api do
namespace :v1 do
match 'log_in', :to => 'token_authentications#log_in', :via => "post"
end
end
end
And my *token_authentications_controller.rb* looks like this:
class Api::V1::TokenAuthenticationsController < ApplicationController
...
def log_in
...
end
...
end
When I hit: api/v1/log_in I get:
Routing Error
uninitialized constant Api
So do I need to declare the namespace somewhere?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Rails 希望名称空间遵循目录结构,除非我弄错了。
给定控制器的类名
Api::V1::TokenAuthenticationsController
,rails 期望它位于app/controllers/api/v1/token_authentications_controller.rb
中。如果您只是将控制器移动到正确的文件夹,我想应该没问题。
您可能还想确保在某处实际声明命名空间模块,例如像这样重构您的控制器:
Rails expects namespaces to follow directory structure, unless I'm mistaken.
Given your class name for your controller,
Api::V1::TokenAuthenticationsController
, rails expects it to live inapp/controllers/api/v1/token_authentications_controller.rb
.If you just move your controller to the correct folder, I think you should be fine.
You might also want to make sure to actually declare the namespace modules somewhere, like for instance refactoring your controller as such: