Как я выполняю несколько строк Ruby в html.erb файле

Я использую Ruby on Rails и потребность выполнить блок кода Ruby в одном из моих html.erb файлов. Сделайте я делаю это как это:

<% def name %>
<% name = username %>
<%= name %>

или как это:

<% def name
name = username %>
<%= name %>

Спасибо за чтение.

25
задан the12 21 February 2018 в 04:28
поделиться

2 ответа

Определение метода в файле ERB необычно, поэтому я не рекомендую это делать.

Если вы хотите вызвать такой блок, как #each , вы можете сделать что-то вроде следующего:

<% names.each do |name| %>
  <%= name %>
<% end %>

Не забудьте <% end%> .

24
ответ дан 28 November 2019 в 18:27
поделиться

Если вам нужны дополнительные функции в вашем представлении, вы обычно объявляете их внутри помощника.

Для каждого контроллера, если есть помощник, он загружается автоматически. Например, если у вас есть PeopleController, в папке app / helpers должен быть people_helper.rb , и он должен выглядеть так

module PeopleHelper
  def name
    #do something
    username
  end
end

Еще одна, очень чистая альтернатива , заключается в использовании шаблона Presenter , но я думаю, что он менее распространен (к сожалению).

В противном случае, если вам нужно несколько строк кода ruby ​​внутри представления erb, чего я стараюсь избегать, я предпочитаю следующий стиль:

<%
   counter_1 = 0
   counter_2 = 1
   do_some_more_prep_here
 %>
<% @records.each do |rec|%>
  <%# do something with the prepped date in each row %>
<% end %>

Также для меня отступы кода более важны, чем отступы html, поэтому я предпочитаю что-то вроде

<table> 
  <% @rows.each do |row| %>
    <tr>
      <td><%= row.item1 %></td>
      <% if row.some_test %>
        <td><%= row.item2 %></td>
      <% end %>
    </tr>
  <% end %>
</table>

Но мне всегда очень интересно услышать разные мнения по этому поводу.

37
ответ дан 28 November 2019 в 18:27
поделиться