棘手。我的Rails模型包括如下行:
scope :unread, where(arel_table[:read].eq(false))
但是,除非定义了arel_table[:read]
,否则此行无法运行,除非列存在,否则它是未定义的。 (可以重写此行不使用Arel,但某些范围不能。)
但是,当我尝试运行rake db:schema:load
时,由于NoMethodError
未定义,我得到arel_table[:read]
。简而言之,它是一个Catch-22。我无法在不运行环境的情况下加载数据库模式,除非数据库已经加载,否则无法加载环境。
是否有更好的答案,而不是“注释掉所有这些行,然后在完成时取消注释”?有许多违规行。
答案 0 :(得分:1)
这是在范围上使用arel的问题。它可能会影响迁移。简单的解决方案就是使用原始SQL。
scope :unread, where('read = false')
更长的答案是在运行迁移时以某种方式加载了类(通常没有加载)。如果您可以在迁移过程中找到导致加载该类的原因并解决它,那么您仍然可以在范围中使用arel_table
。但可能它不值得。