我不明白为什么会出现这个错误(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为什么后者会通过,而前者会导致控制器出现未初始化的常量错误?
发布于 2020-06-02 00:14:02
第一个路由中的to:参数在方法名之前有一个额外的/。
试试这个:
as :user do patch 'users/:id/approve', to: 'users/confirmations#approve', as: :approve_user end
https://stackoverflow.com/questions/62136140
复制相似问题