1

私は次の簡略化されたモデルを持っています:

class User
  attr_accessible :password
  validates :password, :presence => true
  validates_confirmation_of :password, :length => { :minimum => 4 }
end

それはかなり簡単です。RSpec / FactoryGirlでテストしており、次のテストがあります。

it "cannot create with password < 4 characters" do
  expect{ model = FactoryGirl.create(:user, :password => "12", :password_confirmation => "12") }.to raise_error
end

it "cannot update to password < 4 characters" do
  model = FactoryGirl.create(:user)
  model.should be_valid
  model.update_attributes({:password => "12", :password_confirmation => "12"})
  model.reload
  model.password.should_not eq("12")
end

ただし、2番目のテストは失敗します。何らかの理由で、「12」は有効なパスワードとしてデータベースに保存できるようです。なんで?APIはupdate_attributes、検証をバイパスしてはならないと述べています。

4

1 に答える 1

3

検証をスキップしているとは思いません。

私はこれを疑う:

model.update_attributes({:password => "12", :password_confirmation => "12"})

falseを返しています。パスワードはおそらくデータベースの列ではなく、crypted_pa​​sswordとpassword_saltを持っている可能性があるため、パスワードをリロードしてもデータベースからパスワードが読み取られません(これは悪いことです)

また、あなたはおそらく欲しいです:

attr_accessible :password, :password_confirmation
于 2012-12-19T02:57:20.120 に答える