web-dev-qa-db-ja.com

Rubyの複数行をhtml.erbファイルで実行するにはどうすればよいですか?

私はRuby on Railsを使用していて、Rubyコードのブロックを私のhtml.erbの1つで実行する必要がありますファイルです。次のように実行しますか?

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

またはこのように:

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

読んでくれてありがとう。

25
ben

ERBファイルでメソッドを定義することは珍しいので、お勧めしません。

#eachのようなブロックを呼び出す場合は、次のようなことができます。

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

<% end %>を忘れないでください。

24
shingara

ビューで追加の関数が必要な場合は、通常、それらをヘルパー内で宣言します。

コントローラごとに、ヘルパーがある場合は自動的にロードされます。たとえば、PeopleControllerがある場合、app/helpersフォルダ、people_helper.rb、それはこのようになります

module PeopleHelper
  def name
    #do something
    username
  end
end

別の、非常にクリーンな代替手段は Presenterpattern を使用することですが、あまり一般的ではありません(残念ながら)。

そうでない場合、Rubyコードの複数行が必要な場合、回避しようとしますが、これを回避しようとすると、次のスタイルが優先されます。

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