我有一个表单,我在Rails中收集了大量信息。此表单的一部分是要注册的新用户的字段。由于Devise具有专门用于创建新用户的控制器/操作,因此我不知道如何以完全不同的操作以编程方式创建用户,同时创建另一个记录。我真的不能将用户注册表分开。我无法弄清楚如何创建用户,然后将用户登录,就像我在Authlogic中可以轻松做的那样。
我使用了Authlogic和Devise,并认为每个都有自己的优点和缺点。有了Devise,我喜欢用新项目“开始”的速度有多快,但定制它似乎很痛苦。一段时间后,Authlogic对Rails 3有很多问题,我转而使用Devise。我现在正在开发一个新项目并从头开始。
所以我认为这个问题有2个可能的答案:(a)如何在Devise中做到这一点,或者(b)为什么我应该用Rails 3切换到Authlogic。
答案 0 :(得分:83)
您只需创建新的用户模型即可创建新的Devise用户(请参阅https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface)
@user = User.new(:email => 'test@example.com', :password => 'password', :password_confirmation => 'password')
@user.save
要登录新创建的用户,请使用sign_in @user
答案 1 :(得分:8)
在sign_in之前保存新创建的用户将失败,因为设计尚未填充用户对象的必填字段。因此,David的代码将适用于当前页面,但下一页将无法获得已登录用户,因为用户仅在设置会话后保存。当我使用Mongoid时会发生这种情况,我不知道它是否是Mongodb特有的问题。
为了解决这个问题,我有一个非常不完美的解决方案,可以两次调用sign_in。第一个sign_in将保存用户。它只是有效,但人们可以肯定地改进它。
@user = User.new(:email => 'test@example.com',
:password => 'password',
:password_confirmation => 'password')
# This will save the user in db with fields for devise
sign_in @user
# :bypass is set to ignore devise related callbacks and only save the
# user into session.
sign_in @user, :bypass => true
答案 2 :(得分:4)
对于看到这个问题的新人......
执行此操作的简单方法是在
中config/routes.rb
你应该有如下一行:
devise_for :users
所以,你只需添加一个设计将使用的路径前缀:
devise_for :users, :path_prefix =>'auth'
希望它有所帮助!