无法运行rake db:schema:load除非数据库已经被加载

问题描述:

Tricky。我的Rails型号包括线路喜欢:无法运行rake db:schema:load除非数据库已经被加载

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

这条线不能运行,但是,除非arel_table[:read]定义,除非该列中存在是不确定的。 (此行可以改写不使用阿雷尔,但有些领域却不能。)

然而,当我尝试运行rake db:schema:load,我得到一个NoMethodError的事实,arel_table[:read]是不确定造成。总之,这是一个Catch-22。我无法在不运行环境的情况下加载数据库模式,除非数据库已经加载,否则我无法加载环境。

有没有更好的答案比“注释掉所有这些行然后取消注释时完成”?有很多违规行。

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

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

较长的答案是,运行迁移时(通常不加载),该类以某种方式加载。如果您可以在迁移期间找到导致该类加载的原因并解决该问题,则仍然可以在范围内使用arel_table。但可能不值得。