除非数据库已加载,否则无法运行rake db:schema:load

时间:2011-02-09 22:09:18

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

棘手。我的Rails模型包括如下行:

scope :unread, where(arel_table[:read].eq(false))

但是,除非定义了arel_table[:read],否则此行无法运行,除非列存在,否则它是未定义的。 (可以重写此行不使用Arel,但某些范围不能。)

但是,当我尝试运行rake db:schema:load时,由于NoMethodError未定义,我得到arel_table[:read]。简而言之,它是一个Catch-22。我无法在不运行环境的情况下加载数据库模式,除非数据库已经加载,否则无法加载环境。

是否有更好的答案,而不是“注释掉所有这些行,然后在完成时取消注释”?有许多违规行。

1 个答案:

答案 0 :(得分:1)

这是在范围上使用arel的问题。它可能会影响迁移。简单的解决方案就是使用原始SQL。

scope :unread, where('read = false')

更长的答案是在运行迁移时以某种方式加载了类(通常没有加载)。如果您可以在迁移过程中找到导致加载该类的原因并解决它,那么您仍然可以在范围中使用arel_table。但可能它不值得。