Objetos `.select` e` .select! `Do Rails 4 mascarados como um Array típico

Encontrei esse problema fazendo uma atualização do Rails 3.x -> 4.0.2 e definitivamente vale a pena #protip.

Aqui está o código funcional do Rails 3.2:

def self.results_since(time_range, asset_name=nil)
relevant_results
= self.where(created_at: time_range)
if asset_name
relevant_results
.select! do |result|
result
.owner.asset_name == asset_name
end
end
relevant_results
.select { |v| v.approved? }
end

Agora, ao atualizar para o Rails 4, eu não estava recebendo nenhum subconjunto de relevant_resultsao passar em um específico asset_name. Acontece que as mudanças de comportamento nos localizadores do Rails 4 foram as culpadas! A correção foi simples, basta chamar .to_aantes de chamar qualquer selectpara garantir que você lidará com um em Arrayvez de um ActiveRecord::Relationobjeto.

def self.results_since(time_range, asset_name=nil)
relevant_results
= self.where(created_at: time_range).to_a
if asset_name
relevant_results
.select! do |result|
result
.owner.asset_name == asset_name
end
end
relevant_results
.select { |v| v.approved? }
end