我需要验证值的存在,但仅在填充值之后。创建用户时,不需要设置shortcut_url。但是,一旦用户决定选择shorcut_url,他们就无法删除它,它必须是唯一的,它必须存在。
如果我使用validates_presence_of,由于未定义shortcut_url,因此不会创建用户。如果我使用:allowblank =>是的,用户可以将“”作为shortcut_url,它不遵循网站的逻辑。
非常感谢任何帮助。
答案 0 :(得分:1)
这里我们总是确保shortcut_url是唯一的,但是如果设置了属性shortcut_selected(或者如果已设置并且现在已更改),我们只确保它存在
class Account
validates_uniqueness_of :shortcut_url
with_options :if => lambda { |o| !o.new_record? or o.shortcut_changed? } do |on_required|
on_required.validates_presence_of :shortcut_url
end
end
您需要进行测试,以确保这适用于新记录。
答案 1 :(得分:0)
尝试使用:allow_nil选项代替:allow_blank。这样可以防止空字符串验证。
编辑:在创建用户时是否将空字符串分配给shortcut_url,然后呢?也许试试:
class User < ActiveRecord::Base
validates_presence_of :shortcut_url, :allow_nil => true
def shortcut_url=(value)
super(value.presence)
end
end
答案 2 :(得分:0)
尝试条件验证,例如:
validates_presence_of :shortcut_url, :if => :shortcut_url_already_exists?
validates_uniqueness_of :shortcut_url, :if => :shortcut_url_already_exists?
def shortcut_url_already_exists?
@shortcut_url_already_exists ||= User.find(self.id).shortcut_url.present?
end