如何在Ruby on Rails中动态分配变量?

时间:2013-10-29 03:12:37

标签: ruby-on-rails ruby

我想根据通过params传入的变量名称来突出显示表头。

在控制器中我有:

case sort
    when 'grade'
        @sort_by_grade = 'highlight'
    when 'student_name'
        @sort_by_student_name = 'highlight'
end

有更优雅的方法吗?例如,像:

"sort_by_#{sort}" = 'highlight'

我的表格标题代码在Haml中是这样的:

%th{:class => @sort_by_grade}

2 个答案:

答案 0 :(得分:2)

直接回答您的问题(不是最佳做法):

instance_variable_set :"@sort_by_#{sort}", 'highlight'

但实际上,使用哈希或其他更好的数据结构是一个更好的答案。

答案 1 :(得分:1)

正如我在评论中详述的那样,这是一个黑客和不好的做法:

instance_variable_set("@sort_by_#{sort}", "highlight")

就个人而言,我不会在控制器内管理突出显示逻辑。将其解压缩到视图助手中或将逻辑直接放在视图中:

%th{class: ('highlight' if params[:sort] == 'grade')}

或者,使用视图助手:

application_helper

def sort_highlight(col)
  "highlight" if params[:sort] == col
end

视图

%th{class: sort_highlight('grade')}