Igg*_*ggy 1 ruby ruby-on-rails devise
在添加Devise gem之前,我有一个工作模型。安装Devise并运行后rails generate devise User,我开始出现此错误。
每当我去Rails控制台输入
User.first
要么
User.create(username: "Iggy1", email: "iggy1@gmail.com", password: "helloworld", password_confirmation: "helloworld")
它总是返回
User Load (0.3ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
ArgumentError: wrong number of arguments (0 for 1)
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/devise-4.2.0/lib/devise/models/database_authenticatable.rb:146:in `password_digest'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/activemodel-4.2.5/lib/active_model/serialization.rb:108:in `block in serializable_hash'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/activemodel-4.2.5/lib/active_model/serialization.rb:108:in `each'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/activemodel-4.2.5/lib/active_model/serialization.rb:108:in `serializable_hash'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/serialization.rb:17:in `serializable_hash'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/devise-4.2.0/lib/devise/models/authenticatable.rb:114:in `serializable_hash'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/devise-4.2.0/lib/devise/models/authenticatable.rb:120:in `inspect'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/railties-4.2.5/lib/rails/commands/console.rb:110:in `start'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/railties-4.2.5/lib/rails/commands/console.rb:9:in `start'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:68:in `console'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /Users/iggy/.rvm/gems/ruby-2.2.2/gems/railties-4.2.5/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我不断wrong number of arguments (0 for 1)出错。我可以理解它返回create方法的参数错误(也许我指定的参数更少),但是我不明白为什么它会在上显示该错误User.first。
这是我所拥有的:
users_controller.rb
...
def new
@user = User.new
end
def create
@user = User.new(user_params)
end
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
Schema.rb
create_table "users", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "password_digest"
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
end
user.rb (model)
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :lists
has_many :items, through: :lists
has_secure_password
Run Code Online (Sandbox Code Playgroud)
数据库中至少有一个用户。在本地主机索引上,它显示(我正在使用序列化程序):
{"users":[{"id":1,"name":"Iggy1","email":"letsmailiggy@gmail.com","items":[],"lists":[]}]}
Run Code Online (Sandbox Code Playgroud)
我也有has_secure_password模特。那可能是原因吗?我不确定是否has_secure_password与兼容Devise。如何修复它,以便可以在Rails控制台上创建用户?
如果您需要更多代码段,请告诉我!
如果您看一下docs,那么您会看到has_secure_password:
添加用于设置和验证BCrypt密码的方法。此机制要求您具有password_digest属性。
您没有password_digest属性,因此出现错误。
但是真正的问题是,如果您使用的是Devise,则根本不需要has_secure_password。如果要进行自己的身份验证,通常会使用它,Devise已经负责加密和存储密码。将其从模型中删除,一切正常。
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |