如何将传入的 class 添加到 Rails 的部分元素中?

How do I add a passed in class to an element in a partial in Rails?

我有一个用于呈现多个图表的表单。我有多个图表的多个表单元素,但是每个图表的元素是相同的。这是一个简化的例子:

/ Chart 1, Question 1
%select.chart1Option
  %option{value: '1'} Graduation Date
  %option{value: '2'} Major
  %option{value: '3'} GPA

/ Chart 1, Question 2
%select.chart1Option
  %option{value: '1'} Count
  %option{value: '2'} Average
  %option{value: '3'} Median

/ Chart 2, Question 1
%select.chart2Option
  %option{value: '1'} Graduation Date
  %option{value: '2'} Major
  %option{value: '3'} GPA

/ Chart 2, Question 2
%select.chart2Option
  %option{value: '1'} Count
  %option{value: '2'} Average
  %option{value: '3'} Median

图表之间的唯一区别是我添加的 class,.chart1Option.chart2Option。当前的解决方案有效,但不是很干,尤其是有 5 个图表,每个图表有 6 个元素。

如何设置一个部分,这样我就不必重复每个部分并输入我要添加的 class 的名称?正确设置部分后,如何将该变量名称作为 class 添加到 HAML 中的元素?

您可以将它们提取到助手中。嗯,也许是类似的东西? (未经测试:P)

def question_group(num)
  q1_options = ['Graduation Date', 'Major', 'GPA']

  haml_tag :select, class: "chart#{num}Option" do
    q1_options.each_with_index do |opt, index|
      haml_tag :option, opt, value: index+1
    end
    # .. repeat 
  end
end

您也可以通过另一个部分对其进行 DRY,然后在助手中调用该部分并将 haml 代码放入其中。

def question_group(num)
  render partial: 'question_group', locals: { num: num }
end

HAML 部分

%select{class: "chart#{num}Option"}
  %option ..