[英]Rails tutorial 6.3.4 authenticate error
我在做ruby on rails教程书,但出现了错误。 我检查了他写的所有内容,但仍然出现错误。 它告诉我authenticate是nil:NILclass的未定义方法。 我不知道该怎么办。
user.rb:
class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation
attr_accessor :password, :password_confirmation
has_secure password
before_save { |user| user.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false}
validates :password, presence: true, length:{ minimum: 6 }
validates :password_confirmation, presence: true
end
和(某些)我的user_spec.rb
before do
@user = User.new(name: "Example User", email: "User@example", password: "foobar", password_confirmation:"foobar")
end
subject { @user }
it { should respond_to(:password_digest) }
it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }
it { should respond_to(:authenticate) }
it { should be_valid }
# USER.PASSWORD
describe "when password is not present" do
before { @user.password = @user.password_confirmation = " "}
it {should_not be_valid}
end
describe "when password is not present" do
before { @user.password_confirmation = "mismatch" }
it { should_not be_valid }
describe "when password is nil" do
before { @user.password_confirmation = nil }
it {should_not be_valid}
end
describe "with a password that's too short" do
before { @user.password = @user.password_confirmation = "a" * 5 }
it { should be_valid }
end
describe "return value of authenticate method" do
before { @user.save }
let(:found_user) { User.find_by_email(@user.email) }
describe "with valid password" do
it { should == found_user.authenticate(@user.password) }
end
describe "with invalid password" do
let(:user_for_invalid_password) { found_user.authenticate("invalid") }
it {should_not == user_for_invalid_password}
specify { user_for_invalid_password.should be_false}
end
end
end
非常感谢您提供的所有帮助。
我是Rails中的红宝石新手,我只是通过了本教程。 当我这样做时,我发现错误与您相同。
希望我的解决可以为您提供帮助。
在您的user.rb中
删除行:attr_accessor并将has_secure密码编辑为has_secure_password(添加下划线)
class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation
has_secure_password
enter code here
before_save { |user| user.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX},
uniqueness: {case_sensitive: false}
validates :password, presence: true, length:{ minimum: 6 }
validates :password_confirmation, presence: true
end
在您的user.spec.rb中
1)您在describe "when password is not present"
错过了“结束”标签
2)更改测试describe 'with a password that's too short'
从it { should be_valid}
到it { should be_invalid }
describe 'with a password that's too short'
,我认为如果密码少于5则应该无效。
3)最后,如果您想测试通过身份验证,则应使用.com或user.rb中与VALID_EMAIL_REGEX匹配的任何电子邮件结尾更改电子邮件结尾,例如:
before do
@user = User.new(name: "Example User", email: "User@example.com",
password: "foobar", password_confirmation:"foobar")
end
希望对您有帮助。
对不起,我的英语不好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.