【问题标题】:How do I add a passed in class to an element in a partial in Rails?如何将传入的类添加到 Rails 中的部分元素?
【发布时间】:2016-03-15 09:55:39
【问题描述】:

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

/ 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 中的元素?

【问题讨论】:

    标签: ruby-on-rails haml


    【解决方案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 部分

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

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 2013-09-18
      • 2014-08-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多