在Rails项目中设计未定义的方法

时间:2016-08-03 20:19:58

标签: ruby-on-rails ruby devise ruby-on-rails-5

我安装了Devise gem的Rails 5应用程序。我的项目是以这样的方式设置的,所有控制器都是命名空间......甚至是Devise控制器。

在我的路由文件中,我已经完成了这个(这将更好地解释我的命名空间结构):

controllers: {
    sessions: "api/v1/public/members/users/sessions",
    passwords: "api/v1/public/members/users/passwords",
    registrations: "api/v1/public/members/users/registrations",
},
path_names: { 
  sign_in: 'login', 
  password: 'forgot', 
  sign_up: 'register',
  sign_out: 'signout'
}

我还设置了设计视图文件以反映所需的命名空间结构。

我在ApplicationController.rb中包含以下内容:

before_action :authenticate_api_v1_public_members_user!

由于我的Devise控制器是命名空间,标准' before_action:authenticate_user!'方法需要更新到上面的方法才能工作。

我遇到的问题是,我的任何观点都没有提供任何Devise帮助方法。致电' current_user'或者' user_signed_in?'在一个视图中,我被提出了一个未定义的方法'刷新浏览器时出错。我也试过命名这些辅助方法,但无济于事。

更新 模型在我的应用中没有命名空间。我使用的是普通用户模型。只有控制器是命名空间的,并且结构如上面的路由所示。

是否有人遇到类似问题?

1 个答案:

答案 0 :(得分:1)

似乎Devise嵌套在routes.rb的:api_v1_public_members命名空间内。在这种情况下,它不仅会影响authenticate_user!方法,而且会将其更改为authenticate_api_v1_public_members_user!,但也会影响其他方法。

  • current_user转向current_api_v1_public_members_user

  • user_signed_in?转向api_v1_public_members_user_signed_in?

此处存在类似问题undefined method `authenticate_user! Api::PostsController in Devise / Rails 4