2015-03-15 2 views
0

Я создаю простую страницу html, отображающую таблицу. Данные, которые должны быть заполнены в таблице, извлекаются в рубиновой функции в app.rb. Я пытаюсь использовать haml для создания веб-страницы. У меня есть файл index.haml в папку Видов, в котором я создал шаблон для веб-страницыВызов метода из рубинового файла в haml?

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

после этого мне нужно вызвать функцию рубин get_table_header() и get_table_rows() в app.rb. Каков синтаксис для этого? Как включить ссылку на файл ruby ​​в этом haml?

+0

добавьте функции, которые вы хотите исправить, чтобы я мог улучшить свой ответ. –

ответ

0

использование -r опции команды haml

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

вызвать функцию рубиновой и вставить их значение в выходной использовать оператор =

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

Вам необходимо включить функции из app.rb в ваш контроллер.

2

Для того чтобы метод был доступен с контроллера в представлении, вам необходимо указать его как метод 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 
Смежные вопросы