CASCADEだと、更新時も終了時も親に合わせて更新、削除になる。Shareforeigneroreillyrailsrails4オライリー図解外部キー外部キー制約外部キー嫌い2014-10-21環境構築macでPostgreSQLをインストールするsqliteでは外部キー制約が使えるようになったが、gemのforeignerでは使えないらしい。developmentの確認用にpostgreSQLを使うことにした。macでhomebrewを用いてpostgreSQLをインストールする。クライアント専用として使う場合自動起動はいらないのでインストールだけでOK。~/Library/LaunchAgentsログイン時に自動起動させる。このコマンドを打った時点で起動する。~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistちなみにログイン時に自動起動させなくする場合は以下のコマンド。このコマンドを打った時点で終了する。utf8ってコマンドで初期文字コードを指定していたが、2014年10月21日現在、初期値がja_JP.utf-8になっていたのでいらないっぽい。設定ファイルを弄るshellに設定を書き込む。~/.bash_profileARCHFLAGSはgemで使う場合のみ追加。postgresだけに省略できる。自動起動の設定を使うとこのコマンドを使うことはない気がする。-wで起動、終了できるし。.bash_profileはログイン時に1度しか読み込まれない。このままではシェル(terminal)を閉じると反映されない。一度ログアウトして反映させる。外部公開とかはしないので、新規にユーザーを作成したりはしない。\qこのままではログイン時にパスワードを聞かれないので設定を変更する。trusttrustをmd5にする。~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistパスワードを聞かれないようにするパスワードを設定したが、ログイン時に一々聞かれると面倒。パスワードを設定ファイルに書いておく。~/.pgpass中にはホスト名:ポート番号:データベース名:ユーザー名:パスワードのように書く。ワイルドカード*でもOK。例1localhost:5432:*:pyarbz:hogepassちなみにこれは、外部にPostgresqlがある場合でも使える。アクセスするものが複数あれば、複数行書く。TimezoneをUTCに変更するRailsではDBにUTCとして保存し、取り出して使うときにその地域に合わせて変更した方がいいらしい。RDSなど海外サーバを用いることが多いので、UTCに変更しておく。ctrl+d-help\?-SharemacpostgreSQLpostgresrails2014-10-21プログラミングmigrateコマンドを省略するrailsでDBに反映するにはmigrateするが、リセットして一からやり直したいことがある。その時は普通以下のコマンドを入力する。db:migrateただし3回も打つのは面倒臭い。一行で打つとこうなる。db:migrateさらにこれはもっと省略できて、以下のコマンドで実現できる。Rails_ENV=productionSharemigrateproductionrailsrails4rakerubytest2014-10-16プログラミングrailsで多対多のテーブルを実装するrailsでmodelを作成するとき、多対多の実装方法が分かりづらかったのでまとめてみた。railsでの多対多の書き方はいろいろあるらしい。3の順に情報が多い気がする。個人的には1がおすすめ。理由としては、中間テーブル名を用いてDBにアクセス出来ることと、中間テーブルに属性を後で付加できるから。例として画像にtagデータを持たせるテーブルを考える。Toxi法で多対多のテーブルを作成する。railsの規約に沿ってDB設計をした。3の場合imagesテーブルにはnameとURLの情報を保存し、tagsテーブルにはnameの情報を保存させる。tag_idとimage_idは外部キー。違いは中間テーブルの有無だけで、やってることは同じ。実際にはrailsが中間テーブルを自動生成してくれるので、2,3も1のようなテーブルになる。ER図を元にrailsで実装してみる。modelコマンドを用いて、テーブルを作成する。tag:referencesテーブル名が単数形であることに注意。Record経由で自動的に複数形にしてくれる。中間テーブルと関連付けさせる。:tagendちなみにmigrateファイルは以下のようになっている。null制約を付加している。modelコマンドを用いて、テーブルを作成する。tag:references中間テーブルは作らない。migrationファイルで関連付けさせる。テーブルを関連付けさせる。中間テーブルを作成しなければならない。中間テーブルのテーブル名は参照先のテーブル名を辞書順に「_」で連結しなければならない。(※)中間テーブルの主キー列を無効化しなくてはならない。中間テーブルの外部キー列は「参照先のモデル名_id」の形式にしなければならない。中間テーブルのタイムスタンプ列を削除しなくてはならない。null制約を付加している。falseを追加しただけ。外部キー名を明記しないのは、自動生成してくれるため。ちなみに他のmigrateファイルは以下のようになっている。modelコマンドを用いて、テーブルを作成する。tag中間テーブルは作らない。migrationファイルで関連付けさせる。テーブルを関連付けさせる。endendコメントアウトを外す。endendちなみに他のmigrateファイルは以下のようになっている。db:migrateShareER図migratemodelrailsrails4rubytableテーブル多対多2014-10-16プログラミングrailsのmodelについて調べてみたrailsでmodelを操作するときは、以下のコマンドを使う。外部キーを追加する場合にはこうする。外部キーのテーブル名:references既存のテーブルに外部キーを追加する場合は、上記のコマンドでは追加できない。その場合はmigrationを用いる。外部キーのテーブル名:referencesちなみに、railsには以下の規約がある。上記のテーブル名は小文字かつ単数形である必要がある。id:primary_keyとかで作る必要はない。db:migrateDBを反映前の状態に戻したい場合は以下のコマンドを使う。VERSION=0ShareDBmigratemodelrailsrails4ruby外部キー2014-10-16プログラミングrailsでよく出てくる、似たようなものを調べてみた。railsで調べていると、よく似たものが出てくる。わかりづらいのでメモ。HTMLerbデフォルトのやつ。基本はhtmlそのもの。%>haml(yaml)ちょっとふるいやつ。<>の代わりに%を用いるslim新しいやつ。cssやjqueryと記法が似ている。scriptCSSscssコンパイラはruby。sassデフォルトで使えるが、拡張子を.sass変更する。scssから{}が取れた感じ。lessコンパイラはjavascript。rails4のデフォ。springにrspecを対応させる。irbの強化版ipythonみたいなもん。consoleでも動作する。pry中にデバッグできる。ブレイクポイントを設置したり。pry中にデバッグできる。ブレイクポイントを設置したり。テストDBにデータを用意できる。model側のテスト。→factory_girlと同じ。操作やフォーム入力などをエミュレートしてくれる。