Frage

Ich bin mit Ruby on Rails und Notwendigkeit, einen Block von Ruby-Code in einen meiner html.erb Dateien auszuführen. Tue ich es wie folgt aus:

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

oder wie folgt aus:

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

Vielen Dank für das Lesen.

War es hilfreich?

Lösung

Es ist ungewöhnlich, dass ein Verfahren in einer ERB-Datei zu definieren, so dass ich davon abraten.

Wenn Sie einen Block wie #each anrufen möchten, können Sie so etwas wie Folgendes tun:

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

Vergessen Sie nicht die <% end %>.

Andere Tipps

Wenn Sie zusätzliche Funktionen in Ihrer Ansicht benötigen, können Sie normalerweise diejenigen in einem Helfer erklären.

Für jeden Controller, wenn ein Helfer ist, wird es automatisch geladen. Zum Beispiel, wenn Sie eine People im app/helpers Ordner haben, sollte es eine people_helper.rb sein, und es sollte wie folgt

aussehen
module PeopleHelper
  def name
    #do something
    username
  end
end

Eine weitere, sehr saubere Alternative zu verwenden, ist das Moderator Muster , aber ich denke, es ist weniger verbreitet ist (leider) .

Andernfalls, wenn Sie mehrere Zeilen von Ruby-Code in einer erb Ansicht brauchen, die ich versuchen zu vermeiden, ziehe ich die folgende Art:

<%
   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 %>

Auch für mich Code Einzug ist wichtiger als HTML-Einzug, so dass ich so etwas wie

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

Aber ich bin immer sehr interessiert an unterschiedliche Meinungen in dieser Angelegenheit zu hören.

Ich kann jemand vorstellen, dass es in einer bestimmten Vorlage benötigen (kein Punkt in einen Helfer zu schaffen), um keine doppelten HTML-Markup. Das heißt, wenn resultierende HTML-Seite hat ein paar ähnlichen Blöcke von HTML-Markup. Obwohl, kann es leicht missbraucht (unlesbarer Code) wird.

<% def f1(a, b, c) %>
  test: <%= a %>, <%= b %>, <%= c %>
<% end %>

<% f1(1, 2, 3) %>
<% f1(4, 5, 6) %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top