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

时间:2016-03-15 00:14:23

标签: ruby-on-rails haml

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

/ 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

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

如何设置部分以便我不必重复每个部分并传入我想要添加的类的名称?一旦我正确设置了部分,如何将该变量名称作为类添加到HAML中的元素?

1 个答案:

答案 0 :(得分:1)

您可以将它们提取到帮助器中。嗯,也许类似于此? (未经测试: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

你也可以通过另一个部分干掉它,并在帮助器中调用该部分并将haml代码放入其中。

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

HAML Partial

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