Ruby で DB を扱うちょっとしたスクリプトを書くとき、ActiveRecord で生SQLを使うと色々捗ることが多い。 そのためのメソッドをまとめてみた。 事前準備: establish_connection 作成・更新系: execute 検索系: select_all, select_one, select_rows, select_values, select_value プレースホルダ: sanitize_sql_array 事前準備 establish_connection DBとのコネクションを確立する。'mysql2', 'postgresql', 'redshift' など様々なアダプタが使える。 以下は接続設定の一例。 [MySQL] (要 mysql2 gem) require 'active_record' config = { adapter: 'mysql2
集計の仕方いろいろActiveRecordを使った集計方法についていろいろ調べたのでまとめた 集計用のメソッド〜count、sum、minimum、maximum、average
ActiveRecord で、has_many で定義した関連があるとき、その関連の件数を取得するのには、count, size, length の3つのメソッドがあります。さらに、0件かどうかを調べるためには、empty? や exists? といった問い合わせメソッドもあります。 これらの使い分けについて、なるべく分かりやすくなるように解説してみたいと思います。 はじめに、has_many関連とは、次のようなコード例における、company.users のことを指します。 class Company < ActiveRecord::Base has_many :users end class CompanyUsersController < ApplictaionController def index company = Company.find(params[:company_id
とあるプロジェクトでデータベースのテーブル定義書を作成する必要があったのですが、変更がある度に手動でドキュメントを修正するのは大変面倒なため、自動生成することにしました。 Rails の migration を使って管理しているテーブル群(MySQL)の定義書を PDF で出力するまでのフローを紹介します。 この記事の通りに作成すると以下の様式の定義書になりますが、お好きなようにデザインを変更することもできます。詳細は後述。 全体の流れ rake db:migrate でテーブルを作成/変更する DBのスキーマ構造を XML 形式で出力する XML を HTML に変換する HTML を PDF に変換する の大きく4つの手順で定義書を出力します。 1. rake db:migrate でテーブルを作成/変更する この部分は普段の通りに migration ファイルを記述するだけなのですが
ActiveRecord4でこんなSQLクエリどう書くの? Merge編 では、関連先のscopeを使うことができるmergeを紹介しました。mergeを使う事で、変更に強いクエリを美しく組み立てることができました。 今回は、ActiveRecord4で書きにくいSQLクエリたちを紹介します。 書きにくいクエリとは、具体的には以下のものがあげられます。 比較演算ORlikeleft outer joinunionサブクエリexists ActiveRecordでこれらのクエリを組み立てる場合、どうしても美しくない(SQL文字列をべったり書いてしまうような)書き方となってしまいがちです。 この処理を美しく書くためには、ActiveRecordだけの機能では足りず、ActiveRecordが内部で使っているArelというライブラリを使う必要がでてきます。 今回は、Arelを使って華麗にSQLク
ActiveRecord の attribute 更新方法ってどんなものがあって、それぞれどんな違いがあるかご存じですか? 案外色々とあったので表にまとめてみました。リファレンスやソースコードを参考にしつつ、Rails 4.2 でテストしています。 単一の attribute 更新 メソッド 保存 バリデーション(*1) コールバック(*2) readonly チェック(*3) updated_at の更新 補足 使用例
ActiveRecord(Rails3だとActiveModel)は、自分自身(オブジェクト)のプロパティが変更されたかどうか、またどのプロパティがどのように変更されたのかなどを取得する機能が備わっています。 管理画面で操作ログなどを実装する時に役立ちそうです。 変更無し: @user = User.find_by_email("old@exmaple.com") @user.changed? # => false @user.changes # => {} @user = User.find_by_email("old@exmaple.com") @user.email = "new@exmaple.com" @user.changed? # => true @user.changes # => {"email"=>["old@exmaple.com", "new@exmaple.com
Railsのモデル間のリレーションのメソッドには、多くのオプションがある。 今日は、それらを使ってできることをまとめていきたい。 リレーションのオプションでできること一覧 1. ポリモーフィック関連の定義 2. ポリモーフィック関連が定義されたモデルと他のモデルの関連の定義 3. 親モデルに子モデルが依存するようにする 4. 親モデルのプライマリーキーを設定する 5. 外部キーのカラム名を設定する 6. 紐づくモデルのインスタンスを取得するメソッドの名前を設定する 7. 紐づくモデルのobjectに対してvalidationを実行しない 8. 2階層以上離れているモデルのインスタンスを取得する 9. 親モデルのオブジェクトがsaveされたとしても、loadされている子モデルのオブジェクトの変更はsaveされないようにする 10. ひとつのモデル(A)から他のモデルを通して、もう一度モデル(
Rails 2.1からの機能です。modelと書きましたが、ActiveRecord派生クラスのオブジェクトということです。modelを更新する前に、どのカラムが変更されたか、変更前の値は何か知ることができます。 こんなメソッドが用意されています。 changed?変更されてるかどうか。 changed変更されているattribute名の配列。 changes変更されているattribute名前と値のハッシュ。値は変更前更後の値を配列で。 <attr>_changed?<attr>が変更されているかどうか。 <attr>_was<attr>の変更前の値。偏向されてなかったら元の値。 <attr>_change<attr>の変更前後の値の配列。変更されてなかったらnil。 <attr>_will_change!<attr>を変更することを明示。いつ使うかわからん。 <attr>は、例えばti
Active Recordのバリデーションとコールバック(Active Record Validations and Callbacks) † このガイドでは、Active Record オブジェクトのライフサイクルへのフックの掛け方を教えます。 データベースに保存される前にオブジェクトの状態を検証をする方法と、 ライフサイクルの特定の時点でカスタム操作を実行する方法を学べるでしょう。 このガイドを読んで、提示された概念を試した後、以下のことが出来るようになっていることを望みます: Active Record のオブジェクトのライフサイクルの理解。 組み込みの Active Record のバリデーションヘルパの使用。 カスタムバリデーションメソッドの作成。 バリデーションのプロセスによって生成されたエラーメッセージの動作。 オブジェクトのライフサイクル内のイベントに応答するコール
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く