読者です 読者をやめる 読者になる 読者になる

ここにタイトルが入ります

デザイン&プログラミングのことも書くし、それ以外のことも書く。

【Rails】ActiveRecordのhas_manyアソシエーションで個数を取得する(size,count,length)

Rails

ActiveRecordのモデルがhas_manyで関連付けられていた場合、sizeやcountといったメソッドで個数を取得できる。


User:1 対 hobby:多
の場合なら、
Userインスタンス.hobbies.countなんかでユーザーに紐づく趣味の数が取得できる。


あるときUserに紐づくHobbyを追加したのに、sizeで個数を調べても増えていないのであれ?とおもって調べるとどうやらsize,count,lengthで動きが変わるらしい…


〜大変参考になりました!!〜
count、size、lengthの違い - うんたらかんたらRuby - Rubyist


例)

def add_hobby
  current_user = User.find(1)
  puts current_user.hobbies.size #=> 1だとする
 
 # ユーザーに紐づく趣味を1つ追加
  hobby = Hobby.new(:user_id => 1,  :name => "soccer")
  hobby.save!

  puts current_user.hobbies.size #=> 1が表示される
  puts current_user.hobbies.length #=> 2が表示される
end


sizeはオブジェクトをロードした時に取得した件数を返しているのですが、lengthは関連先をリロードして返却してくれるようです。
私が困った件数が増えない…という問題はlengthに変更すれば解決しました。


まあそもそもユーザーに趣味を追加するなら、

current_user = User.find(1)
current_user.hobbies << Hobby.new(:user_id => 1,  :name => "soccer")

て書いたらそんな問題起きないよね、ってことで(・へ・)