无法运行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
。但可能不值得。