Rails验证模型方法

时间:2012-12-12 05:33:06

标签: ruby-on-rails-3

如何在rails 3.2中验证全名的唯一性?

class User < ActiveRecord::Base
    attr_accessible :first_name, :last_name

    validates :name, :uniqueness => true

    def name
        [first_name, last_name].join(' ')
    end
end

当我运行rspec时,测试失败并出现此错误。

  1) User has a first name
     Failure/Error: before { @user = FactoryGirl.create(:user) }
     NoMethodError:
       undefined method `text?' for nil:NilClass

1 个答案:

答案 0 :(得分:1)

解决方案1:

validates :first_name, :uniqueness => { :scope => :last_name, :message => "name is uniq" }

解决方案2:

class Person < ActiveRecord::Base
  validates_with GoodnessValidator, :fields => [:first_name, :last_name]
end

class GoodnessValidator < ActiveModel::Validator
  def validate(record)
    if options[:fields].any?{|field| record.send(field) == "Evil" }
      record.errors[:base] << "This person is evil"
    end
  end
end