Для того чтобы метод был доступен с контроллера в представлении, вам необходимо указать его как метод 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
Тогда есть два пути для выполнения Ruby-код в Haml. Сначала используйте знак «=». Это выполнит рубиновый код и напишет (отобразит) возвращенный результат. Я считаю, что это то, что вы ищете.
%body
.table-div
%table
%tr
%th
= get_table_header
%tr
%td
= get_table_row
Это то же самое, что и <%= get_table_row %>
в ERB.
Примечание: для выполнения рубиновых методов вам не нужны скобки. Во-вторых, эти имена методов похожи на частичные части HTML. Вы можете абстрагировать этот код в другом файле HAML и вызвать их с помощью вспомогательного помощника Rails. Вы можете узнать больше здесь Layouts and Rendering in Rails
Второй способ выполнения Ruby-кода в HAML - использовать hiphen. Это хорошо для условностей. Например:
-if <some condition is true>
= get_table_header
-else
= get_table_row
Это как делать <% 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
добавьте функции, которые вы хотите исправить, чтобы я мог улучшить свой ответ. –