Help us understand the problem. What is going on with this article?

RailsのReferencesとindexについて

More than 1 year has passed since last update.

初めに

Ruby on Railsを勉強していてよくrails g model post user:referencesみたいなのを見かける。

でもいまいちreferencesがなんなのかよくわからないので調べで見みた。

とりあえず

とりあえずrails g model post body:text user:referencesを実行してみる。

マイグレーションファイルはこんな感じ

class CreatePosts < ActiveRecord::Migration[5.2]
  def change
    create_table :posts do |t|
      t.text :body
      t.references :user, foreign_key: true

      t.timestamps
    end
  end
end

このreferences が何なのか、foreign_keyは何なのかだが

まずreferencesは今回の場合だとuser_id:integerを書くのと同じ。

だがmodel/post.rbにbelongs_to:userというのを自動的に追加してくれる。

foreign_key: trueについては外部キー制約とかいうらしくuser_idに何でも入れれるわけではなく実際にあるuser_idしか入れれないようにするものだそう....

なのでuser:referencesと書いたらモデルにbelogns_to: userと追加してしかも外部キー制約も行うマイグレーションファイルを作ってくれる感じなのだそう。

便利だね!

indexについて

indexについてもよく見かけるがよくわかっていない。

なんか検索を行う際にあったら少し高速になるぐらいに思っていた。

調べてみたらこんな記事が出てきた。

データベースにindexを張る方法
https://qiita.com/seiya1121/items/fb074d727c6f40a55f22

この記事の最初にindexが何たるかが書いてあってテーブルの中の特定のカラムを複製し検索を早めるためにあるんだとか。

そしてむやみにindexを付ければよいわけではなく多いデータの良く検索されるカラムにindexを付与するのがよいそう

ちなみにindexを付与したい場合は

マイグレーションファイルに

add_index :users, :name  

みたいに書けばいける。

またインデックスに一意制約を付けたい場合もある。

例えばuserのemailは一意制約がついているべき。

その時にindexに一意制約を付けるには

add_index :users, :email, unique: true

と書く

またemailの場合すべてを小文字にして登録するといったことが行われる。

その際は

before_save { self.email = email.downcase }

と書けばOK

おわり

rails の references と index について理解が曖昧だったので調べながら書いてみました。

なにか間違っているところがあればご指摘いただけるとありがたいです。

sibakenY
大学卒業後Ruby, Ruby on Railsを勉強しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした