[Ruby on Rails]アソシエーションについて
アソシエーションとは、Railsにある機能のひとつで、
モデル間の管理するものです。
これはどういう働きをするかというと、
コントローラで
モデルをまただいためんどくさいやりとりを
簡単に記述できるようにしてくれます。
適用ルールは2つ
①モデルクラス(models/xxxx.rb)に、has_manyやbelongs_toなどの記述がされている
②所属する側のテーブル(データベース)に所属する「クラス名_id」が「カラム」として存在する
例えば、
ユーザーがつぶやきを登録するアプリの場合、
データベースには
usersテーブルとtweetsテーブルが存在するわけですが
このとき、ふたつの関係が重要です。
全てのツイートは、ユーザーのうちの誰かが登録したもの、
一方、ユーザー目線になると、ユーザーは自分の作成したツイートを複数個所持している状態。
userモデルにとっては、この状態のことをhas manyの関係「User has many Tweets」の状態です。
一方、tweetモデルにとっては、belongs toの関係Tweet belongs to User」の状態であると言えます。
この概念をそのままおぼえます。
この関係をそのまま、各モデルに記述します。
具体的にアソシエーション使用のために、行う記述は
app/models/user.rb
class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_many :tweets ここ end
app/models/tweet.rb
class Tweet < ActiveRecord::Base belongs_to :user ここ end
これで、コントローラでのめんどくさい記述
たとえば
@tweets = Tweet.where(user_id: current_user.id).order("created_at DESC")
は
@tweets = current_user.tweets
ですむようになる
(Userモデルのインスタンス.tweetsと記述するだけ)