从haml中的ruby文件调用方法?

时间:2015-03-15 16:19:01

标签: ruby haml

我正在创建一个显示表格的简单html页面。要在表中填充的数据在app.rb中的ruby函数中检索。我正在尝试使用haml来创建网页。我在views文件夹中有一个index.haml文件,我在其中创建了网页模板

%body
 .table-div
   %table
     %tr
       %th //some ruby code to get the table header
     %tr
       %td //create td for each table row.

之后我需要在app.rb中调用ruby函数get_table_header()和get_table_rows()。这样做的语法是什么?如何在这个haml中包含对ruby文件的引用?

3 个答案:

答案 0 :(得分:5)

对于视图中控制器可用的方法,您需要在控制器中将其指定为helper方法。像这样:

class ApplicationController < ActionController::Base
  helper_method :get_table_header, :get_table_row

  def get_table_header
    < code here >
  end

  def get_table_row
    < code here >
  end
end

查看更多:Helper Methods

然后,有两种方法可以在HAML中执行Ruby代码。首先,使用'='符号。这将执行ruby代码并写入(显示)返回的结果。我相信这就是你要找的东西。

    %body
      .table-div
        %table
          %tr
            %th
              = get_table_header
          %tr
            %td 
              = get_table_row

这与在ERB中执行<%= get_table_row %>相同。

注意:您不需要括号来执行Ruby方法。其次,这些方法名称看起来像HTML部分。您可以将此代码抽象为另一个HAML文件,并使用Rails Partial帮助程序调用它们。您可以在Layouts and Rendering in Rails

了解更多信息

在HAML中执行Ruby代码的第二种方法是使用hiphen。这对条件有好处。例如:

-if <some condition is true>
  = get_table_header
-else
  = get_table_row

这就像在ERB中执行<% some code %>一样。返回的结果不会显示在页面上。也适合映射迭代。也许你有多个表行。

-dog_names = ["Teddy", "Skip", "Humphrey"]
-dogs_names.map do |name|
   %td= name

这将返回3个带有名称的标签。

<td>Teddy</td>
<td>Skip</td>
<td>Humphrey</td>

您还可以在控制器中包含辅助文件。 这些助手确实会掌握辅助方法。

class YourController < ApplicationController
  include HelperOne
  include HelperTwo
end

答案 1 :(得分:0)

使用-r命令的haml选项

haml input.haml output.html -r ./ruby_file.rb

调用ruby函数并将其值插入输出中使用=运算符

%body
 .table-div
   %table
     %tr
       %th= get_table_header 
     %tr
       %td= get_table_rows

答案 2 :(得分:0)

您需要将app.rb中的函数包含到控制器中。