【问题标题】:Uniqueness constraint not affecting fields唯一性约束不影响字段
【发布时间】:2012-12-20 15:19:56
【问题描述】:
class User < ActiveRecord::Base
  attr_accessible :username, :password
  attr_accessor :username, :password

  validates :username, :presence => true, :uniqueness => true
  validates :password, :presence => true
end

测试:

  it "prevents username duplication" do
    FactoryGirl.create(:user, username: 'ted').should be_valid
    FactoryGirl.build(:user, username: 'ted').should_not be_valid
  end

我已经确认 User.count() 是 2。唯一性约束我缺少什么?

【问题讨论】:

  • 首先,你的测试失败了吗? FactoryGirl.build 不会创建模型,只是在内存中构建它。如果您收到User.count == 2,您的数据库中可能已经有另一个不相关的用户,您可以检查一下吗?
  • 到@PinnyM 的观点-也许在规范的before(:each)before(:all) 部分中,您正在创建用户记录,导致2 的计数?
  • 如果我将其切换为创建,用户数变为 2。对不起,我的意思是当记录正确保存时,我得到 2。验证应该会影响第二个构建的模型,对吗?无论如何,我创建用户对象的控制器肯定会继续创建用户,无论用户名是否唯一。
  • 尝试用User.new(username: 'ted').valid?.should be_false替换FactoryGirl.build(...)
  • @normalocity:仍然失败。我也更正了添加密码,并且它恢复有效。

标签: ruby-on-rails ruby activemodel activesupport


【解决方案1】:

attr_accessor 破坏模型。摆脱那条线。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 2019-10-16
    • 1970-01-01
    • 2023-02-13
    • 2014-06-20
    • 2015-10-20
    • 1970-01-01
    • 2015-11-14
    相关资源
    最近更新 更多