有效时,我需要验证值的存在,但仅在填充值后。当创建用户时,不需要设置shortcut_url。但是,一旦用户决定选择一个shorcut_url,他们不能删除它,它必须是唯一的,它必须存在。仅当
如果我使用validates_presence_of,由于未定义shortcut_url,所以不会创建用户。如果我使用:allowblank => true,那么用户可以将“”作为shortcut_url,它不遵循网站的逻辑。
任何帮助将不胜感激。
有效时,我需要验证值的存在,但仅在填充值后。当创建用户时,不需要设置shortcut_url。但是,一旦用户决定选择一个shorcut_url,他们不能删除它,它必须是唯一的,它必须存在。仅当
如果我使用validates_presence_of,由于未定义shortcut_url,所以不会创建用户。如果我使用:allowblank => true,那么用户可以将“”作为shortcut_url,它不遵循网站的逻辑。
任何帮助将不胜感激。
在这里,我们总是会确保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
您需要进行测试以确保它可以很好地处理新记录。
尝试: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
没有这样的运气。仍然不会创建一个用户... – 2011-04-27 20:26:37
我发现了一些错误报告,但是,与allow_nil – 2011-04-27 20:34:28
尝试有条件的验证,是这样的:
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
有关我喜欢你,但仍然不好。 Rails2.X的方式... – 2011-04-27 20:44:39
仍然没有... – 2011-04-27 20:46:47
说谎...实施不正确。你赢了。 – 2011-04-27 20:50:51