Главное, что вы, похоже, запутываете, это то, что суперклассовая часть определения класса Ruby представляет собой произвольное выражение Ruby .
Итак, что-то вроде этого совершенно законно:
class Foo < if rand < 0.5 then Bar else Qux end end
Очевидно, что это не имеет смысла, но, например, в _why блестящем маленьком веб-фреймворке везунчика Camping , маршруты определеныкак это:
class Edit < R '/post/(\d+)/edit'
и Миграции определены так:
class BlogInitialSchemaCreation < V 1.0
В ActiveRecord
, миграции определены так:
class CreateProducts < ActiveRecord::Migration[5.0]
Все это просто использует тот факт, что все, что находится справа от <
в определении класса, может любым произвольным выражением Ruby , которое вычисляется при оценке определения класса.