Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Rails の Active Record に like がない理由

More than 5 years have passed since last update.

Active Record に like がない理由を見つけたのでメモっとく。

Rails 4 で not が追加されたとき likenot_like も追加される予定だった。実際のところコミットされた後にロールバックされた。

そのロールバックに対してのコメントが紛糾したわけだが、DHH がロールバックした理由を4つあげている。

Here are the design considerations that I had when we decided to roll this back:

1) It's an odd mismatch of SQL and Ruby with the % sign for designating the order.
2) It opens the door for wanting to expand this line of DSL further (including undesireable ventures into greater_or_equal_than).
3) It's being a fairly uncommon query not in need of optimization.
4) not_like is nasty (and "dislike" wont cut it either).

Feel free to extract this into a plugin and mix it into your own flavor of Rails, though.



1) % 記号について SQL と Ruby で奇妙なミスマッチがある
2) DSL の境界線を押し広げる要求への扉を開いてしまう(greater_or_equal_than への望ましくない冒険を含む)
3) 最適化の必要がないとしてもかなり珍しいクエリである(like は Rails にて特殊な文法を新たに作ってサポートするほどにメジャーなクエリではない」という意味合い。sugitak さんのコメントより)
4) not_like はイケてない(dislike でもダメだ)

とはいうものの、遠慮なくこれをプラグインとして抜き出して、それを Rails の自前の味付けとして追加してもらって構わない。

僕としては likenot_like が入らなかったことを残念に思う気持ちもあるが、こういう判断が積み重なって一貫性のある設計の Rails が出来上がっていると考えると割と素直に受け入れられる。DHH の2番目の理由が一番納得できるかな。

LIKE を SQL でベタに書かなきゃならないとか信じられないって言ってる Rails エンジニアさんが近くにいたらそっとこのことを教えてあげてほしい。

Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Mikatus 株式会社の VP Engineering 兼デザイングループグループリーダー。最近は Event Storming と Lagom に興味がある。


No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
Help us understand the problem. What is going on with this article?