如何重写这段代码,使其完全动态,并且不必使用 case
子句手动列出 @group
的所有可能值?
# Grouping
@group = params[:group] if !params[:group].blank?
case @group
when 'category_id'
@ideas_grouped = @ideas.group_by { |i| i.category_id }
when 'status_id'
@ideas_grouped = @ideas.group_by { |i| i.status_id }
when 'personal_bias'
@ideas_grouped = @ideas.group_by { |i| i.personal_bias }
when 'business_value'
@ideas_grouped = @ideas.group_by { |i| i.business_value }
end
最佳答案
您可以使用某种元编程 上面的代码可以用其中一种方式重构
if params[:group].present? && ["category_id","status_id","personal_bias","business_value"].include?(params[:group])
@ideas_grouped = @ideas.group_by { |i| i.send(params[:group]) }
end
关于ruby-on-rails - 在 Ruby on Rails 中重构 group_by 的切换 block 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13192265/