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 nullis 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 に答える