LoginSignup
2
1

More than 3 years have passed since last update.

アソシエーション(1対1)!!

Posted at

アソシエーション?

簡単に説明するとモデルを利用したテーブル同士の関連付けのことですね。
テーブル同士で関連付けておき、一方のモデルからもう一方のモデルに
アクセスできるようにするためということですね。

関連付けを行う理由

Railsでは、「関連付け(アソシエーション: association)」とは2つの
Active Recordモデル同士の繋がりのことですね。

2つモデルの間には関連付けを行なう必要がありますが、
その理由を知っていますか?

それはですね、関連付けを行う事でコードの共通操作をより
シンプルで簡単にできるからなんです。

アソシエーション(1対1)定義の際に使用するメソッド

has_oneメソッド

アソシエーションが1対1の時に使われます。
注意点としては、親モデル側に「has_one」の記述を、
子モデル側に「belongs_to」を書きます。

「belongs_to」メソッドについては下記のURLに説明がありますので、
そちらを参考にして下さい。今回は説明を省きます。

belongs_toメソッド参考記事

まとめると下記のようになりますね。

has_one.png

今回、説明する上で下記のアソシエーション(関係)で記述例を
載せていきます。

                userとaddress         1対1

アソシエーションの定義記述方法

先にUserモデルの記述例を載せていきます。

/models/user.rb
class User < ApplicationRecord

   has_one :address
end

書き方としましては、has_one :モデル名(単数形)
今回は「1対1」のためモデル名は単数形になります。

Userモデルの記述は以上です。

次は、addressモデルの記述にいきましょう。

/models/address.rb
class Address < ApplicationRecord

  belongs_to :user

end

書き方としましては、 belong_to :モデル名(単数形) になります。

これで、Userモデルとaddressモデル間のアソシエーションができましたね。

まとめ

「1対1」のアソシエーションには、has_oneを用いましょう!!
「1対1」を記述する際は、「1対多」・「多対多」などのように
モデル名が複数形ではなく、単数形で記述するのであまり気を付けなくても
大丈夫ですね笑

これまでで、「1対1」・「1対多」の説明をさせて頂いたので残りは
「多対多」になりますね。

これで「1対1」のアソシエーションの定義の仕方などわかって頂けたら嬉しいです。
ご覧頂きありがとうございました。

以上。

2
1
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
1