LoginSignup
2
0

More than 3 years have passed since last update.

Railsチュートリアル(第13章)

Posted at

はじめに

Railsチュートリアルの第13章が終わりました。
この章では、ユーザーの投稿内容の作成を行います。
ポイントだけメモしておきます。

モデルの関連付け

以下のコマンドのように、user:referencesとつけてモデルを作成すると、Userモデルと関連付けられたモデルを作成できます。

rails generate model Micropost content:text user:references

UserモデルとMicropostモデルに以下の記述をすることで、モデルの関連付けができます。
そのモデルに対して1対1の場合はbelongs_to、1対他の場合はhas_manyです。

app/models/micropost.rb
   belongs_to :user
app/models/user.rb
  has_many :microposts

関連付けられたモデルを生成する場合は以下のように記述します。
そのUserモデルに関連づいたMicropostモデルを生成できます。

@user = users(:michael)
@micropost = @user.microposts.create(content: "Lorem ipsum")

また、以下のようにdependent: :destroyとモデルに記述することで、そのモデルを削除した際に関連付けられたデータを同時に削除してくれます。

app/models/user.rb
  has_many :microposts, dependent: :destroy

デフォルトスコープ

モデルに以下のように記述することで、デフォルトの順序を指定することができます。

app/models/micropost.rb
  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
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0