В соответствии с документами определение области действия "точно такое же, как определение метода класса".Вы можете сделать то же самое, выполнив:
class EventInstance < ApplicationRecord
belongs_to :event
# Event starts between 12am and 10am
def self.morning
where(start_time: (event.start_time.midnight...event.start_time.change(hour: 10)) )
end
def event_name
# This works
event.name
end
end
Или даже:
class EventInstance < ApplicationRecord
belongs_to :event
class << self
# Event starts between 12am and 10am
def morning
where(start_time: (event.start_time.midnight...event.start_time.change(hour: 10)) )
end
end
def event_name
# This works
event.name
end
end
Во всех этих случаях вы не можете вызвать метод для экземпляра EventInstance
, потому чтоНу, это пример, а не класс.
Я думаю, вы могли бы сделать что-то вроде:
class EventInstance < ApplicationRecord
belongs_to :event
delegate :start_time, to: :event
# Event starts between 12am and 10am
def in_morning?
start_time.in?(start_time.midnight...start_time.change(hour: 10))
end
def event_name
# This works
event.name
end
end
Чтобы определить, происходит ли экземпляр EventInstance
между 12:00 и 10:00. * 10101
Я также отмечу, что Jörg W Mittag хотел бы сказать:
Я один из тех Ruby Purists, которому нравится указывать, что в Ruby не существует такого понятия, как метод класса.Тем не менее, я в полном порядке, используя термин метод класса в разговорной речи, , пока все стороны полностью понимают, что речь идет о разговорной речи .Другими словами, если вы знаете , что не существует такой вещи, как метод класса, и что термин «метод класса» просто сокращен от «метод экземпляра синглтон-класса объекта, который является экземпляромClass
", тогда проблем нет.Но в остальном я только видел, как это мешает пониманию.
Пусть все стороны полностью поймут, что термин метод класса используется выше в своем разговорном смысле.