【发布时间】:2009-11-26 12:46:17
【问题描述】:
我的 RoR 模型中的验证存在问题:
默认保存 self.accessed = Time.now.to_s self.modified = 访问 验证用户名 极好的 结尾 def validate_username if User.find(:first, :select => :id, :conditions => ["userid = '#{self.userid}'"]) self.errors.add(:userid, "已经存在") 结尾 结尾如您所见,我已经用自己的方法替换了模型的保存方法,在调用父级 .save 方法之前调用了 validate_username。我的问题是,即使添加了错误,Rails 仍会尝试将新行插入数据库,即使用户名重复。我在这里做错了什么?
PS:我没有使用validate_uniqueness_of,因为以下区分大小写的问题:https://rails.lighthouseapp.com/projects/8994/tickets/2503-validates_uniqueness_of-is-horribly-inefficient-in-mysql
更新:我尝试了 weppos 解决方案,它可以工作,但不是我想要的那样。现在,该字段被标记为不正确,但前提是所有其他字段都正确。我的意思是,如果我输入了错误的电子邮件地址,例如,电子邮件字段被标记为错误,而用户 ID 字段则不是。然后,当我提交正确的电子邮件地址时,用户 ID 字段被标记为不正确。希望你们明白我的意思:D
更新 2:数据应该以某种方式进行验证,不应该将重复的用户 ID 插入数据库,不区分大小写。用户 ID 的格式为“用户域”,例如。 “test-something.net”。不幸的是,validates_uniqueness_of :userid 不起作用,它尝试将“test-something.net”插入数据库,即使已经存在“Test-something.net”。 validate_username 应该是我解决这个问题的(快速)解决方法,但它没有用。 weppos 解决方案确实有效,但并不如我所愿(如我的第一次更新中所述)。
还没有弄清楚……有人吗?
最好的问候, x3ro
【问题讨论】:
-
您能否详细说明应如何验证数据?
标签: ruby-on-rails validation activerecord