В Ruby неявный получатель в методе экземпляра всегда является экземпляром:
class Thing
def foo
inspect
end
end
irb(main):026:0> Thing.new.foo
=> "#<Thing:0x007fde95955828>"
Правильно ли я предполагаю, что это я. не очень нужно, так как в
область применения метода экземпляра модели, self всегда модель
экземпляр по умолчанию?
В ruby всегда есть неявный получатель (я). Что это такое, зависит от контекста. В методах класса его класс. Его «главный» (глобальный объект), если вы не в классе или модуле.
class Foo
inspect
end
# => "Foo"
def foo
inspect
end
# => "main"
Вы должны явно использовать self
только там, где необходимо устранить неоднозначность (как, например, self.class
). Но во многих ситуациях это может помочь читабельности вашего кода.
Все вышеперечисленные параметры в значительной степени функционально эквивалентны:
ActiveRecord::Base.transaction
подключается к БД для этой среды с database.yml
или ENV["DATABASE_URL"]
.
User.transaction
или class.transaction
можно использовать, если вы хотите иметь разные соединения для класса модели или просто не любите печатать. Все, что он действительно делает, это connection.transaction(options, &block)
.
- Уровень экземпляра
self.transaction
или @user.transaction
просто прокси для метода класса. Все, что он действительно делает, это self.class.transaction(options,&block);