Это вопрос от рельсов-новичков, пытающихся разобраться в проблемах и возможностях.
Я всегда думал, что области видимости - это методы класса в рельсах, но на днях я увидел этот код из DHH:
module Visible
extend ActiveSupport::Concern`
module ClassMethods
def visible_to(person)
where \
"(#{table_name}.bucket_id IN (?) AND
#{table_name}.bucket_type = 'Project') OR
(#{table_name}.bucket_id IN (?) AND
#{table_name}.bucket_type = 'Calendar')",
person.projects.pluck('projects.id'),
calendar_scope.pluck('calendars.id')
end
end
end
Таким образом, метод visible
используется следующим образом:
current_account.posts.visible_to(current_user)
Вот что меня смущает. Self
вот коллекция сообщений, поэтому мы работаем с экземплярами, тогда как видимый метод, похоже, предназначен для использования в качестве метода класса. Разве Дэвид не пытается вызвать метод класса как динамическую область видимости? Может кто-нибудь уточнить?