29

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

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

またはこのように:

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

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

4

3 に答える 3

39

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

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

module PeopleHelper
  def name
    #do something
    username
  end
end

もう 1 つの非常にクリーンな代替手段は、Presenter パターンを使用することですが、(残念ながら) あまり一般的ではないと思います。

それ以外の場合、erb ビュー内に複数行の 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>

しかし、私はこの問題についてさまざまな意見を聞くことに常に非常に興味を持っています。

于 2010-06-23T08:44:52.550 に答える
25

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

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

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

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

于 2010-06-23T08:16:19.637 に答える