这个问题与我几年前提出的问题有关:
Instantiating Devise user models manually using contents of params hash
我不确定这是否是rails 4问题,但我发现我无法在控制器代码中手动实例化设计用户。这曾经在轨道3中工作。
class RegistrationsController < Devise::RegistrationsController
...
def schema_test
@user = User.new(:email => 'jhw@ausd.k12.edu', :password => 'asdf123', :password_confirmation => 'asdf123')
@user.save
end
...
end
这是我的routes.rb中特定于设计的部分: devise_for:users,:controllers =&gt; {:registrations =&gt; &#34;登记&#34;}
devise_scope :user do
get '/schema_test', to: 'registrations#schema_test'
end
当我调用schema_test时,我发现用户对象没有保存到数据库中。有没有人有任何建议?
答案 0 :(得分:0)
最佳做法是在将其集成到rails应用程序之前检查rails控制台中的行为。
找出问题的最简单方法是阅读设计返回的错误消息。这可能是由于未满足密码要求和/或电子邮件已存在于您的数据库中引起的。
从应用程序的根目录运行rails c
。
@user = User.new(:email => 'jhw@ausd.k12.edu', :password => 'asdf123', :password_confirmation => 'asdf123')
# Check if the user object is valid
@user.valid?
# If it comes back false, read the error messages
@user.errors.messages
=> {:password=>["is too short (minimum is 8 characters)"]}
在您的示例中,由于密码太短,用户未被保存。