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

Use*_*232 0 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.
Run Code Online (Sandbox Code Playgroud)

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

小智 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
Run Code Online (Sandbox Code Playgroud)

查看更多:帮助方法

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

    %body
      .table-div
        %table
          %tr
            %th
              = get_table_header
          %tr
            %td 
              = get_table_row
Run Code Online (Sandbox Code Playgroud)

这与<%= get_table_row %>ERB 相同.

注意:您不需要括号来执行Ruby方法.其次,这些方法名称看起来像HTML部分.您可以将此代码抽象为另一个HAML文件,并使用Rails Partial帮助程序调用它们.您可以在此处了解更多Rails中的布局和渲染

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

-if <some condition is true>
  = get_table_header
-else
  = get_table_row
Run Code Online (Sandbox Code Playgroud)

这就像<% some code %>在再培训局做的那样.返回的结果不会显示在页面上.也适合映射迭代.也许你有多个表行.

-dog_names = ["Teddy", "Skip", "Humphrey"]
-dogs_names.map do |name|
   %td= name
Run Code Online (Sandbox Code Playgroud)

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

<td>Teddy</td>
<td>Skip</td>
<td>Humphrey</td>
Run Code Online (Sandbox Code Playgroud)

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

class YourController < ApplicationController
  include HelperOne
  include HelperTwo
end
Run Code Online (Sandbox Code Playgroud)