我正在创建一个显示表格的简单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)