「Ruby on Rails」を触っています。
今回もほとんどドットインストールとkindleUnlimitedで学んだことの
備忘録みたいな感じです。
前回の 1 つのテーブルに対して CURD の処理を作りました。
その全編を記事を作りながら行っていたら大体 8 時間位かかりましたが、
振り返りながら 1 から作り直していったら 2 時間程度で行けたので、コツがつかめれば 1 時間は切れそうです。
目次
関連付けされた model を作成する。
1 | # モデル作成 |
[カラム名(モデル名)]:refurences
の部分が外部制約されるカラムになる。
モデルの関連付けを設定する
[アプリケーションルート]\app\models[モデル名].rb を編集する。
モデルが 1 対 1 の関係を持っていることを示す場合、
参照モデル側では以下のように記述する。
1 | class [被参照モデル] < ApplicationRecord |
被参照モデルには以下のように記載する。
1 | class [参照モデル名] < ApplicationRecord |
例に出される、投稿と投稿へのコメントのモデルの場合、
投稿に対してコメントには複数、コメントは投稿に対して一意に紐付く 1 対多の関係になっている。has_one
、has_many :throug
などの関連付けもある。
複数モデルが関連づいたルーティング
1 | Rails.application.routes.draw do |
特定レコードへの参照モデルをビューで呼び出す。
被参照モデルを表示するとき
被参照モデルのコントローラ配下のようにする。
1 | def メソッド |
インスタンス変数@data に被参照モデルの検索結果を持たせて、呼び出す
1 | # anyメソッドでデータが1つ以上あることを確認一覧出力 |
特定レコードへ関連付けされたデータ登録ビューの作成
被参照モデルのコントローラ配下のようにする。
1 | def メソッド |
1 | <%= form_for([@data,@data.[参照モデルの複数形].build]) do |f|%> |
参照モデルがあるときの被参照モデルのレコード削除
削除処理をコントローラで定義するときは下の処理でよい
1 | def destroy |
が、参照モデルの定義をしているとエラーになる。
モデルの定義で、dependent:
を指定することが必要
値は以下などの選択肢がある。
- destroy
指定したモデルの削除が実行される。 - delete
指定したモデルに対して直接 delete を行う。 - nullify
何もしない参照している外部キーには null を入れる - restrict_with_exception
関連付けされたレコードがあるとき例外発生 - restrict_with_error
関連付けられたレコードがあるとき被参照レコードにエラーが追加される。
記述は下のようにする
1 | class [参照モデル] < ApplicationRecord |
それぞれの違いは、別途確認することにする。
今回までで、ある程度の操作がわかったので、
そろそろRuby on Rails Tutorialに手を出したい。
なんか調べたら、Ruby on Rails Tutorialの難易度が高めだとの書き込みを見つけ他ので、怖気づいて段階を踏みました。
ではでは。
Rails 面白い。