验证在postgresql迁移期间创建错误

时间:2013-07-09 17:10:36

标签: ruby-on-rails ruby-on-rails-3 validation rails-postgresql

我正在将应用程序从rails 2.3迁移到rails 3.我正计划迁移到heroku,所以我也要转移到postgres。

我有一个有很多字段的模型 - 大约30个。我想验证所有这些字段的完成情况,除了2.在我的rails 2应用程序中我有:

validates_presence_of (self.column_names - ["id", "email_not_name"]), :on => :update

这很有用,实际上也适用于Rails3。当我尝试运行新数据库的迁移时出现问题 - 我得到“PGError:错误:关系” table_name “不存在”错误描述here。不确定为什么SQLite3不会发生这种情况,但这并不重要。

如果我删除验证,迁移运行正常 - 问题是self.column_names实际上还没有存在。同样,如果我将迁移更改为

validates_presence_of :field1, :field2, :on => :update

迁移将毫无问题地运行。显然,我可以列出所有30个字段,但这让我感到笨拙而且不易维护。我真正想要的是:

validates :all, :except=>:email_not_name, :presence=>true, :on => :update

但遗憾的是,实际上并不存在!有没有办法,我可以做到这一点,而不诉诸于此? (rails2或rails3风格)

答案:

好的,对于遇到此问题的人来说,这是如何做到的。解决方案是创建一个自定义错误处理程序,使用:

调用

验证:check_all_questions_completed,:on => :更新

错误处理程序本身是:

def check_all_questions_completed
 Person.column_names.each do |col|
  if (Person.column_names - ["id", "email_not_name"]).include?(col) && send(col).nil?
   errors.add(col)
  end
 aend
end

如果有人可以整理我的代码,请(有关模型是人)

0 个答案:

没有答案