Как вы пишете сложный метод класса, который применяется ко всему, к чему он прикован?Позвольте мне объяснить: простой метод класса, такой как:
def self.despondent
where(despondent: true)
end
, может быть легко связан:
User.desperate.despondent.disillusioned
Но что если у вас есть сложный метод класса, такой как:
def self.friendly_dogs(user)
@dogs1 = Dog.none
@dogs2 = Dog.none
if user.has_dog
users = User.friends.where(has_dog: true)
@dogs1 = Dog.where(user_id: users.ids)
end
if user.wife.has_dog
users = user.wife.friends.where(has_dog: true)
@dogs2 = Dog.where(user_id: users.ids)
end
return @dogs1.or(@dogs2).distinct
end
Как бы вы написали это, чтобы вы могли разместить его в любом месте цепочки?И в следующем примере выберет только friendly_dogs из всех пуделей, которым 1 год:
@dogs = Dog.where(breed: "poodle").where(age: "1").friendly_dogs.paginate(page: params[:page])