0

您好,这是我在本地开发环境(SQLite)上运行良好的 ActiveRelation 查询

@table2_items = @table1var.table2_items.find(:all, conditions: ["status1 is ? AND status2 is ? AND start_datetime > ?", true, nil, Time.now.to_datetime], order: [:field_id, :created_at])

我认为这只是一个语法错误......有人可以帮忙吗?谢谢

4

1 回答 1

2

您的 SQL 以它结束:

status1 is 't'

那是无效的:is仅与is null,is distinct from和类似的结构一起使用。

您应该升级到更现代的语法并将大部分工作留给 ActiveRecord:

@table2_items = @table1var.table2_items
                          .where(:status1 => true, :status2 => nil)
                          .where('start_datetime > ?', Time.now)
                          .order(:field_id, :created_at)

剩下的大部分是“我如何比较事物?” 逻辑起来 ActiveRecord 并且更容易阅读,因为占位符和它们的值没有相互分离。

一旦你解决了这个问题,你真的应该在你的开发环境中安装 PostgreSQL,这样你就可以在同一个堆栈上开发和部署。没有 ORM 可以保护您免受数据库之间的各种差异。

于 2013-06-14T22:42:22.683 回答