Почему ActiveRecord :: Relation удалил array_delegable? в Rails 5?

В 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, но, видимо, там не работает регистрация и нет возможности попросить о помощи)


person nbrustein    schedule 02.08.2016    source источник


Ответы (1)