在rails中使用case语句的动态组

时间:2014-04-25 17:06:20

标签: ruby-on-rails ruby ruby-on-rails-3 refactoring

我正在我的rails应用程序中构建一个报告,现在我遇到了group_by的复杂性。此报告基本上包括按姓名,birth_date,年龄,client_type(enumerize 1 - Normal,2 - VIP,3 - 有限制),性别(enumerize 1 - Male,2 - Female),create_at分组显示的客户信息。今天我的代码是这样的。

@customers = Customers.where(filters).group_by{ |customer|
     case params[:grouped_by].to_i
     when 0
         customer.name
     when 1
         customer.birth_date.try(:to_date)
     when 2
         customer.age
     when 3
         customer.client_type.try(:text)
     when 4
         customer.gender.try(:text)
     else
         customer.created_at.try(:to_date)
     end
     }

嗯,这段代码并不漂亮,我也不知道该怎么做。我尝试使用rails发送但没有成功,只是因为尝试。我不想使用ActiveRecord.group。

我知道这个问题太过于学者,但我不会接受任何建议,欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

我没试过也不确定,请创建一个像

这样的哈希
1.9.3p448 :062 > hash={0=>{:name => :to_s},1 => {:birth_date => :to_date}}

然后

1.9.3p448 :067 > case q
1.9.3p448 :068?>   when 0,1
1.9.3p448 :069?>   aa=Site.try(hash[q].keys.first).try(hash[q].values.first)
1.9.3p448 :070?>   puts aa
1.9.3p448 :071?>   end

请尝试那样。如果它工作正常。