【问题标题】:cause of ActionController::RoutingError (uninitialized constant Users::Confirmations) errorActionController::RoutingError (未初始化常量 Users::Confirmations) 错误的原因
【发布时间】:2020-06-02 00:14:01
【问题描述】:

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

查看

<%= link_to "Approve", approve_user_path(user), method: :patch %>

路线

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

控制器

class Users::ConfirmationsController < Devise::ConfirmationsController
 def approve
  @user = User.find(params[:id])
  @user.approve
 end
end

型号

class User
 def approve
  self.approved = true
  save
 end
end

相比之下,这个效果很好:

查看

<%= form_for user, url: add_name_path(user) do |f| %>
 <%= f.text_field :firstname %>
 <%= f.text_field :lastname %>
 <%= f.submit "Submit" %>
<% end %>

路线

patch 'users/:id/add_name', to: 'users/confirmations#add_name', via: :patch, as: :add_name

控制器

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

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    第一个路由中的to: 参数在方法名称前多了一个/

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2013-08-25
      • 1970-01-01
      • 2016-01-16
      • 2017-08-05
      • 1970-01-01
      相关资源
      最近更新 更多