備忘録
そんな挙動だったの!?ってなったやつです。
なぜそうなるのかわからないので しってる人いたら
前提
group、userクラスがある
groupにユーザーが紐づいている
class Group
has_many :users, dependent: :destroy
class User
belongs_to :group
下記みたいな感じ
今回はgroupAに3件userが紐づいてる
User全体では100件存在している
Use.count
=> 100
group_a.users
→ [user1, user2, user3]
3件紐づいている
user1.group
→ group_a
クラスメソッド呼び出し側
コントローラー側から呼んでます
group_a.users.to_count
モデル側クラスメソッド
user.rb
def self.to_count
User.count
end
結果
group_a.users.to_count
=> 3
つまり
User.countだと100件返ってくる想定だとおもって作っていたんですが
レシーバーの分しかカウントが取得できない
group_a.users
=User
みたいな扱いになっている認識になりました。
勝手な考察
クラスメソッド定義する際に
def self.to_count
もしくは
def User.to_count
で定義ができる
つまりself = USer
selfはレシーバーが入るので
レシーバー = self = User
になるのかな?と考えています。
だれか真相を教えてください(>_<)
Comments
Let's comment your feelings that are more than good