ActiveRecordで値が入力されていないものだけを抽出したい
データベースがnullを許可しているかどうかによって変わってくるけど
デフォルトだとnullが許可されているので値が入力されていないものを抽出する場合には null
と 空文字列
両方を抽出対象とする必要がある
create_table "messages", force: :cascade do |t| t.bigint "user_id" t.text "content" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["user_id"], name: "index_messages_on_user_id" end
上記のようなデータ構造のモデルからcontentが入力されていないものだけを抽出するには次のようにする必要がある
Message.where(content: [nil, ''])
これで実行されるSQLは
SELECT "messages".* FROM "messages" WHERE ("messages"."content" = $1 OR "messages"."content" IS NULL)