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_results
ao 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_a
antes de chamar qualquer select
para garantir que você lidará com um em Array
vez de um ActiveRecord::Relation
objeto.
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