我有一个name
属性为唯一的Path模型。我想将默认值设置为'/'
同样的。
我已按以下方式完成。
class Path < ActiveRecord::Base
attr_accessible :name
validates :name, presence: true, uniqueness: true
before_validation :set_default_path
private
def set_default_path
self.name = name.presence || '/'
end
end
域模型设计为:
class Domain < ActiveRecord::Base
attr_accessible :name, path_id
validates :name, :path_id, presence: true
validates :name, uniqueness: {scope: :path_id}
end
但是这对于路径空白名称的连续插入不起作用。
path = Path.find_or_create_by_name('')
domain = Domain.new(name: 'stackoverflow.com')
domain.path = path
domain.save! # Fails with validation error
ActiveRecord::RecordInvalid:
Validation failed: Path can't be blank
有没有一种强有力的方法来实现这一目标?
答案 0 :(得分:2)
您应该删除以下回调
before_validation :set_default_path
并使用以下名称验证: -
validates :name, presence: true, uniqueness: true, :if => 'name.present?'
并编写一个迁移文件,将默认值添加到路径表的name属性中,如下所示: -
change_column :paths, :name, :string, :default => '/'
或
change_column_default :paths, :name, '/'
答案 1 :(得分:0)
在验证时添加条件:
validates :name, presence: true
validates :name, uniqueness: true, unless: proc { |e| e.name == "/" }