我不知道为什么会出现此错误(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
为什么后者会通过,但前者会给控制器带来未初始化的常量错误?
第一个路由中的to:
参数在方法名称之前有一个额外的/
。
试试这个:
as :user do
patch 'users/:id/approve', to: 'users/confirmations#approve', as: :approve_user
end