加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Ruby on Rails中重构group_by的切换块语句

发布时间:2020-12-17 03:47:14 所属栏目:百科 来源:网络整理
导读:如何重写此代码,使其完全动态,我不必使用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' @i
如何重写此代码,使其完全动态,我不必使用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

解决方法

如果您不需要白名单:

@ideas_grouped = if (group = params[:group]).present?
  @ideas.group_by(&group.to_sym)
end

如果您需要白名单,可以致电包含?首先(参见Amar的答案),但是为了添加一些新内容,让我用声明方法推送它(Object#whitelist留给读者练习,可能来自Ick):

@ideas_grouped = params[:group].whitelist(IdeaGroupers).maybe do |group|
  @ideas.group_by(&group.to_sym)
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读