Rails сложный метод цепочки классов - PullRequest
0 голосов
/ 28 сентября 2019

Как вы пишете сложный метод класса, который применяется ко всему, к чему он прикован?Позвольте мне объяснить: простой метод класса, такой как:

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...