2
1

More than 5 years have passed since last update.

Rails6 のちょい足しな新機能を試す59(ActiveRecord where編)

Posted at

はじめに

Rails 6 に追加されそうな新機能を試す第59段。 今回は、 ActiveRecord where 編です。
Rails 6 は、ActiveRecord の where がRuby 2.6 で導入された開始のない Range に対応しました。

Ruby 2.6.3, Rails 6.0.0.rc1 で確認しました。Rails 6.0.0.rc1 は gem install rails --prerelease でインストールできます。

$ rails --version
Rails 6.0.0.rc1

User モデルを作る

User モデルを作ります

$ bin/rails g model User name, birth_at:datetime

User モデルを修正する

scope で、2001年以降に生まれた人を検索できるようにします。
このとき (Time.new(2001, 1, 1)..) と Range の終端が指定されていないことに注意してください。

app/models/user.rb
class User < ApplicationRecord
  scope :second_millennium_after, -> { where(birth_at: (Time.new(2001, 1, 1)..)) }
end

seed データを作成する

seed データを作成します。 2001/01/01 より前の誕生日の人と2001/1/1以降の誕生日の人を用意します。

db/seeds.rb
User.create(
  [
    { name: 'Taro', birth_at: '2001-01-01' },
    { name: 'Hanako', birth_at: '2002-09-15' }
  ]
)

マイグレーションして seed データを作成する

$ bin/rails db:create db:migrate db:seed

rails console で確認する

rails console を実行して確認します。

irb(main):001:0> User.second_millennium_after.to_a
  User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."birth_at" >= $1  [["birth_at", "2001-01-01 00:00:00"]]
=> [#<User id: 2, name: "Hanako", birth_at: "2002-09-15 00:00:00", created_at: "2019-07-14 05:59:20", updated_at: "2019-07-14 05:59:20">]

試したソース

試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try059_where_endless_range

参考情報

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1