【Rails】ActiveRecordのhas_manyアソシエーションで個数を取得する(size,count,length)
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")
て書いたらそんな問題起きないよね、ってことで(・へ・)