Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
Railsでプログラムを書いるとSQLを直接記述する機会が意外と多いので、 なるべくRubyらしく書く方法がないか調べてみました。 ORなどかなり基本的な構文でもarel_tableを使う必要があるのですね。 というわけで、Arel::Table を使ってみました。 動作確認環境は以下の通りです。 ruby: 1.9.3-p392 Rails: 3.2.13 arel: 3.0.2 MySQL: 5.1.65 検索条件をORで繋げたい 基本的な構文ですがSQLを直接記述する場合が多いのではないでしょうか? User.where("name = ? OR name = ?", "太郎", "花子").to_sql #=> "SELECT `users`.* FROM `users` WHERE (name = '太郎' OR name = '花子')" なるべくRubyで書こうとするとこうな
同じ名前のカラムがあるモデルに関連があるとする。FooとBarがあってそのどちらにもname属性があるようなケース。 Foo.where(:name => 'baz') これはもちろん問題なく実行できる。次のような関連を使う場合でも特に問題は起きない。 Foo.joins(:bar).where(:name => 'baz') ここでハッシュ表現できないような条件を考えてみる。 Foo.where('name like "baz"') これももちろん問題ないのだけれど、次のようなのになるとちょっと困ってしまう。 Foo.joins(:bar).where('name like "baz"') もしもこれを実行しようとするとStatementInvalid例外が上がってくる。SQL文を生成させてみると「WHERE (name like "baz")」となってしまっているのを確認できる。 wh
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く