Ruby on rails 自定义Desive gem用户配置文件非常有效,但会导致注册、编辑等错误。。。[第5条]
我从网上找到的一些教程中添加了用户配置文件,链接到配置文件效果很好。但是现在我在用户注册方面遇到了问题 我假设,由于我已经为用户配置文件创建了users\u controller.rb,它现在正在查看users\u controller.rb中的所有操作。因此,关于注册,我添加了createdef,然后它要求defnew,然后defupdate等等。。。事情变得非常复杂,我犯了不同类型的错误 我的问题: 是否可以将所有操作重定向到默认设计注册、登录、更新。。。而我只为用户配置文件保留user_controllers.rb 谢谢大家! 路线 控制器Ruby on rails 自定义Desive gem用户配置文件非常有效,但会导致注册、编辑等错误。。。[第5条],ruby-on-rails,devise,routing,rubygems,ruby-on-rails-5,Ruby On Rails,Devise,Routing,Rubygems,Ruby On Rails 5,我从网上找到的一些教程中添加了用户配置文件,链接到配置文件效果很好。但是现在我在用户注册方面遇到了问题 我假设,由于我已经为用户配置文件创建了users\u controller.rb,它现在正在查看users\u controller.rb中的所有操作。因此,关于注册,我添加了createdef,然后它要求defnew,然后defupdate等等。。。事情变得非常复杂,我犯了不同类型的错误 我的问题: 是否可以将所有操作重定向到默认设计注册、登录、更新。。。而我只为用户配置文件保留user_c
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end
class UsersController
设备中的布线和控制器
您的config/routes.rb
确定对URL发出的每个GET/POST/PUT/PATCH
请求所触发的操作
您可以在下面的链接中阅读更多关于此的信息
当您配置设计时,您可以使用routes.rb中的设计
方法来设置路由
# config/routes.rb
Rails.application.routes.draw do
devise_for :users
end
要了解更多有关方法的信息,请阅读
design_for
将生成以下路由:
# Session routes for Authenticatable (default)
new_user_session GET /users/sign_in {controller:"devise/sessions", action:"new"}
user_session POST /users/sign_in {controller:"devise/sessions", action:"create"}
destroy_user_session DELETE /users/sign_out {controller:"devise/sessions", action:"destroy"}
# Password routes for Recoverable, if User model has :recoverable configured
new_user_password GET /users/password/new(.:format) {controller:"devise/passwords", action:"new"}
edit_user_password GET /users/password/edit(.:format) {controller:"devise/passwords", action:"edit"}
user_password PUT /users/password(.:format) {controller:"devise/passwords", action:"update"}
POST /users/password(.:format) {controller:"devise/passwords", action:"create"}
# Confirmation routes for Confirmable, if User model has :confirmable configured
new_user_confirmation GET /users/confirmation/new(.:format) {controller:"devise/confirmations", action:"new"}
user_confirmation GET /users/confirmation(.:format) {controller:"devise/confirmations", action:"show"}
POST /users/confirmation(.:format) {controller:"devise/confirmations", action:"create"}
如果客户端/浏览器通过url/users/sign_in
向服务器执行GET
请求,服务器将从文件夹app/controllers/designe/sessions
中的控制器执行操作new
这就是我的视图生成的地方,即使我没有Desive控制器,它也是这样映射的
您可以使用以下语法覆盖此行为,如本部分所述:
devise_for :users, controllers: { sessions: 'users/sessions' }
这意味着对于会话
您将使用位于文件夹app/controllers/users/sessions
中的控制器,而不是designe/sessions
您可以对此进行测试,生成路由,并查看如何获得每个操作的路由
最佳实践
从中建议的最佳实践只是生成designe控制器,该控制器将具有已与designe路由连接的操作。来自控制器的每个操作都将通过super
设计控制器操作调用,如果您想增强或更改该逻辑,可以通过阅读
您可以向该控制器添加任何需要的操作,然后适当地配置路由
有关RubyonRails指南中的路由和控制器信息
感谢Fabrizio@Designerdesigne\u的详细回复:用户
重定向到默认的designe控制器。您的/app/controllers
中没有设备控制器,您可以生成一个控制器,向设备控制器调用super
。设计控制器在您的gem中,您可以在github页面中查看它,它将在您的gem文件中。您可以在RVM或Rbenv文件夹中找到它,具体取决于您选择的内容use@Designerdesign_for:users,controllers:{sessions:'users/',registrations:'users/',omniauth_回调:'users/',passwords:'users/')}
etc era不断将控制器从添加到此路由,但这是错误的方法。您应该增强定义的标准设计控制器,以便更好地理解设计代码,并检查其控制器
devise_for :users, controllers: { sessions: 'users/sessions' }