60519


なぜエラーになるのでしょうか？

> ActionView::Template::Error (SQLite3::SQLException: near "all": syntax  
>  error: SELECT "items".* FROM "items" WHERE (h >= 0) AND (w >= 0) AND  
>  (d >= 0) AND (weight >= 0) AND (all >= 0) ORDER BY "items"."price"  
>  ASC):
[code]

    @items = Item.where('h >= ?',height).where('w >= ?',width).where('d >= ?',depth).where('weight >= ?',weight).where('all >= ?',total).order(price: :asc)
    
[/code]

ここで、

[code]

    .where('all >= ?',total)
    
[/code]

を省くと、正常に動きます。

データのカラムは以下の通りです。

[code]

    class CreateItems < ActiveRecord::Migration[5.1]
      def change
        create_table :items do |t|
          t.integer :h
          t.integer :w
          t.integer :d
    
          t.timestamps
        end
      end
    end
    
[/code]

と

[code]

    class AddColumnsToItems < ActiveRecord::Migration[5.1]
      def change
        add_column :items, :name, :string
        add_column :items, :price, :integer
        add_column :items, :weight, :integer
    
      end
    end
    
[/code]

です。どうかよろしくお願いします。


CC BY-SA 4.0
2019-11-14T11:09:39.980
60516
2019-11-15T06:45:57.827
2019-11-15T06:45:57.827
34550
34550
question
ruby-on-rails ruby mysql sql rails-activerecord
where句のエラーについて


SQLがsyntax errorになっているのは、ALLがSQLiteのSQLの予約語だからじゃないかと思います。 他のRDBMSでも予約語だと思います。
(UNION ALLのため

<https://www.sqlite.org/lang_keywords.html>

[code]

    where("`all` > 0")
    
[/code]

のようにクオートが必要なんじゃないかと思います。

コマンドラインからはこのように確認できます。

[code]

    $ sqlite3
    SQLite version 3.24.0 2018-06-04 14:10:15
    Enter ".help" for usage hints.
    Connected to a transient in-memory database.
    Use ".open FILENAME" to reopen on a persistent database.
    sqlite> select * from hoge where all > 0;
    Error: near "all": syntax error
    sqlite> select * from hoge where `all` > 0;
    Error: no such table: hose
    
[/code]

ただし、allカラムも定義にはないようなので、このままではSQLは失敗するとは思います。


CC BY-SA 4.0
2019-11-14T11:36:14.917
60519
2019-11-14T11:50:37.800
2019-11-14T11:50:37.800
36627
36627
60516
answer