首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionController::RoutingError (未初始化常量Users::Confirmations)错误的原因

ActionController::RoutingError (未初始化常量Users::Confirmations)错误的原因
EN

Stack Overflow用户
提问于 2020-06-02 00:03:20
回答 1查看 20关注 0票数 0

我不明白为什么会出现这个错误(ActionController::RoutingError (uninitialized constant Users::Confirmations)),因为连接视图、路由、控制器和模型的结构与同一页面上使用的类似方法/路由相同。

视图

代码语言:javascript
复制
<%= link_to "Approve", approve_user_path(user), method: :patch %>

路由

代码语言:javascript
复制
as :user do
 patch 'users/:id/approve', to: 'users/confirmations/#approve', as: :approve_user
end

控制器

代码语言:javascript
复制
class Users::ConfirmationsController < Devise::ConfirmationsController
 def approve
  @user = User.find(params[:id])
  @user.approve
 end
end

模型

代码语言:javascript
复制
class User
 def approve
  self.approved = true
  save
 end
end

相比之下,这一条工作得很好:

视图

代码语言:javascript
复制
<%= form_for user, url: add_name_path(user) do |f| %>
 <%= f.text_field :firstname %>
 <%= f.text_field :lastname %>
 <%= f.submit "Submit" %>
<% end %>

路由

代码语言:javascript
复制
patch 'users/:id/add_name', to: 'users/confirmations#add_name', via: :patch, as: :add_name

控制器

代码语言:javascript
复制
class Users::ConfirmationsController < Devise::ConfirmationsController
 def add_name
  @user = User.find(params[:id])
  @user.update(name_params)
 end

 private
 def name_params
  params.require(:user).permit(:firstname, :lastname)
 end
end

为什么后者会通过,而前者会导致控制器出现未初始化的常量错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 00:14:02

第一个路由中的to:参数在方法名之前有一个额外的/

试试这个:

as :user do patch 'users/:id/approve', to: 'users/confirmations#approve', as: :approve_user end

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62136140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档