В Rails 4 ActiveRecord :: Relation автоматически делегировал методы массива, такие как slice
, так что вы могли бы сказать, например, SomeModel.where(prop: 'value').slice(0, 10)
Это было удалено в Rails 5. Почему?
Вот соответствующий код в ActiveRecord :: Relation в рельсах 4:
def array_delegable?(method)
Array.method_defined?(method) && BLACKLISTED_ARRAY_METHODS.exclude?(method)
end
def method_missing(method, *args, &block)
if @klass.respond_to?(method)
scoping { @klass.public_send(method, *args, &block) }
elsif array_delegable?(method)
to_a.public_send(method, *args, &block)
elsif arel.respond_to?(method)
arel.public_send(method, *args, &block)
else
super
end
end
И вот он в Rails 5:
def method_missing(method, *args, &block)
if @klass.respond_to?(method)
scoping { @klass.public_send(method, *args, &block) }
elsif arel.respond_to?(method)
arel.public_send(method, *args, &block)
else
super
end
end
(Примечание: я пытался разместить этот вопрос на форуме Rails, но, видимо, там не работает регистрация и нет возможности попросить о помощи)