Railsで使えるGem

ActiveRecord使い方まとめ

投稿日:2013年12月21日 更新日:

By: North Carolina National GuardCC BY 2.0

ActiveRecord入門|ドットインストールをみて個人的まとめ

ActiveRecord4の情報も追加していきたい

#400 What’s New in Rails 4

CREATE

データの挿入

1 ハッシュで挿入

 

2 クラスのプロパティにアクセス

 

3  ブロックをつかう

 

4 createでnew+saveを一気に

 

READ

1 allで全データ

配列が返ってくる > ActiveRecord::Relationを返すようになった

2 firstで最初のデータ,lastで最後のデータ

オブジェクトが返ってくる(4.0.2)

3 findを使ってidで検索

オブジェクトが返ってくる

Railsで大量のデータをまとめて更新するならfind_each使うよね

Rails 4.0 で新しく追加される予定の find_or_create_by メソッドについて

 

4 find_by_でダイナミックファインダ(4以降は非奨励)

条件に合致する最初のオブジェクトが返ってくる

Rails4 find_byでちょっとスマートに

次のwhereを使うのと比べると、配列ではなくオブジェクトが返ってくるのでfirstをつかう必要がない分スマート

5 where

配列が返ってくる > ActiveRecord::Relationを返すようになった

6 limitでデータ数を制限

配列が返ってくる > ActiveRecord::Relationを返すようになった

7 orderで並べ替え

参考: ActiveRecordの基本機能とマイグレーション、バリデーション (2/3)

  • NULLを最後にしたいときは、IS NULLを使う
    NULLのデータは最小値として取り扱われるけど、実際にはNULLを最後にして並べ替えをしたいとき

参考:【SQL】ORDER BY で NULL を最後にする場合の注意点

8 scopeで条件をまとめる

Rails 4.0を使ってみよう – その2 ActiveRecordの使い方

default_scope はブロックが必須に

 

scopeはクラスメソッドの形でも書ける

引数が無効な場合には以前はメソッドチェインをするためにscopedを返していたけど、allを返すようにする.

 

UPDATE

1 プロパティを変更してsave

 

 

2 update_attribute

update_attributeは次のupdateがあればもういらないかも

 

3 update (update_attributes)

rails4からupdate_attributesは単にupdateで置き換えることができる

 

4 update_allで複数データを一気に更新

 

DELETE

 1 delete, delete_all

deleteはシンプルにレコードを削除するので早い

 

2 destroy, destroy_al

destroyはオブジェクトをつかう?ので、関連するオブジェクトを削除できたり高機能だけど遅い

 

Validation

1 書き方

ActiveRecord Validationの書き方メモ

ひらがなのみを許す.

 

2 エラーの拾い方

save!メソッドなどで、エラーがraiseされる

Rails4の scaffoldで生成されるやつ

 

 

Relationship

外部キーの設定

従属先のテーブルに外部キーのカラムを作る.

命名規則は、基本的に「参照先のモデル名_id」という名前で、integer

has_many

上の設定で、post.commentsで関連するコメントを参照できる.

belongs_to

上の設定で、comment.postで参照先のポストを参照できる.

has_one

user.authorで関連するauthorを呼び出せる.has_manyと違ってオブジェクトが返ってくる.

has_and_belongs_to_many

シンプルに多対多の関係を設定する方法.

まず、テーブル名1(複数形)_テーブル名2(複数形)のような中間テーブルを作っておく.(モデルも作る必要がない.)

中間テーブルには、参照先テーブルの外部キーをおのおの登録する.

設定をすることで、中間テーブルを飛ばして、参照先のオブジェクトにアクセスできる.

ターブル名はabc順で?

Rails 3 has_and_belongs_to_many migration

has_many_thorough

中間テーブルに外部キー以外の情報があって、中間テーブルにもアクセスする必要がある場合

中間テーブルはモデルが必要.

その他

Rails3.2で関連するモデルのフォームをあわせて表示~accepts_nested_attributes_for & fields_for

Rails generateのときにbelongs_toを設定

[初心者向け] Railsで関連するデータ(親子関係)を保存する方法あれこれ

Railsでnewとbuildのちがいによると、buildだと親idをつけてくれる

結合

joins

基本INNER JOINを使う.OUTER JOINを指定することも可能.

INNER JOINについては、INNER JOINとOUTER JOINを参照.

OUTER JOINにはLEFT OUTER JOINとRIGHT OUTER JOINがある.

(おまけ) Rails 4.1 では、LEFT OUTER JOIN の使用に、references が必要になった。

includes

関連するモデルをまとめて取得する.

関連するモデルでソートする場合などに.

Rails – Sort by join table data

#181 Include vs Joins

Rails と テーブル結合

Arelを使う

ArelはActiveRecord3から内部で使われるようになったライブラリ.

scopeをつなげるようにしてsqlが書けると評判.

github.com/rails/arel

第43回 Rails 3を支える名脇役たち その1 – Arel –

ActiveRecordを支える技術 – Arelとは何者なのか?(全5回) その5 – まとめ

#355 Hacking with Arel

Activerecordから使う場合はwhere区の中で使うことが多い.

基本的には、クラスメソッドでarel_tableでテーブルを指定して、[:カラム名]で、そのカラムを指定できる.

そして、rspecぽいeq(=)やlt(<)gt(>)などのメソッドをつなげることができる.

例えば、

to_sqlで見るとだいたいの感じがわかる

 

そのほかの使用例など

RailsのArelのTips

Rails whereで複数カラムのOR条件を作成する

ActiveRecord4でこんなSQLクエリどう書くの? Arel編

ActiveRecordで集計関数の結果を複数selectしたいんです

いちいちarel_tableって書きたくない場合はarel-helperってgemを使うといいぽい.

Rails 4.1 で arel-helpers を使う

Rails consoleで簡単にスキーマを確認

モデル名だけ入力すればOK

データベースにつながらないときはcountとかで一回つなげてやればOK

stackoverflow.com/questions/19755310/rails-console-cant-connect-to-database

 

情報

ActiveRecord4でこんなSQLクエリどう書くの? Merge編

ActiveRecordのmergeは使える子

Railsでアソシエーションされたモデルを条件にして検索する

Rails 4.1.0 の ActiveRecord enums を使ってみる

ActiveRecord のモデルを整理する7つのパターン

ActiveRecordのSQLインジェクションパターン

ActiveRecord4でこんなSQLクエリどう書くの? Squeel編

ActiveRecordでNOT EXISTSを発行する

ActiveRecord4での集計をいろいろまとめた

-Railsで使えるGem
-,

執筆者:

関連記事

文字をダブルクリックしてそのままフォーム編集するやつのメモ~in place edit

By: the Italian voice 目次1 Best in place2 Mercury editor3 create.js4 スクラッチで5 X-editable Best in place …

RailsでECサイト構築~spree

  *インストール方法を書き換えました.前の方法だとアドミンユーザーが登録されませんでした. 今回はインストール+日本語化だけ 目次1 インストール2 日本語化 インストール gem [cr …

no image

Rails4とPostreSQL9.3で全文検索〜pg_bigm

目次1 準備2 migration3  使い方 準備 エクステンションを導入しておく Ubuntu Server12.04でPostgreSQL9.3をつかう〜pg_bigmで全文検索 migrati …

Ubuntu ServerのGuardからGrowl for Windowsにネットワーク経由で通知する

github.com/guard/guard 普段はWindows7から仮想環境(VirtualBox)のUbuntu Server 12.04.1へputtyで接続して開発してます. Virtual …

Rails3.2+Mongoidでログイン機能~devise

  目次1 Gemfile2 generate3 model4 試す5 Login/Logout6 アクセス制限7 メニュー構成を整える8 翻訳 I18n9 見た目を整える Gemfile …