はじめに
Railsチュートリアルの第13章が終わりました。
この章では、ユーザーの投稿内容の作成を行います。
ポイントだけメモしておきます。
モデルの関連付け
以下のコマンドのように、user:references
とつけてモデルを作成すると、Userモデルと関連付けられたモデルを作成できます。
rails generate model Micropost content:text user:references
UserモデルとMicropostモデルに以下の記述をすることで、モデルの関連付けができます。
そのモデルに対して1対1の場合はbelongs_to
、1対他の場合はhas_many
です。
belongs_to :user
has_many :microposts
関連付けられたモデルを生成する場合は以下のように記述します。
そのUserモデルに関連づいたMicropostモデルを生成できます。
@user = users(:michael)
@micropost = @user.microposts.create(content: "Lorem ipsum")
また、以下のようにdependent: :destroy
とモデルに記述することで、そのモデルを削除した際に関連付けられたデータを同時に削除してくれます。
has_many :microposts, dependent: :destroy
デフォルトスコープ
モデルに以下のように記述することで、デフォルトの順序を指定することができます。
default_scope -> { order(created_at: :desc) }
パーシャルへの変数の受け渡し
以下のようにパーシャルを呼び出す際に、ハッシュの形式で変数を渡すことができます。
受け取った側のパーシャルで使用する場合は、キーが変数名になります。
<%= render 'shared/error_messages', object: f.object %>
whereメソッド
以下のようにデータを取得する場合、SQLのwhere文の形式で記述することができます。
?の部分はエスケープ処理で、後ろに記述しているid
の内容が入ります。
これにより、SQLインジェクション対策になります。今回はidなので問題ありませんが、ユーザーの入力内容を条件に設定する場合などに、不正な動作を起こさない対策になります。
Micropost.where("user_id = ?", id)
独自のバリデーション
以下のようにvalidate
メソッドにメソッド名のシンボルを与えることで、独自のバリデーションを記述することができます。
validates
ではなく、validate
という単数なことに気をつけます。
validate :picture_size