Ruby on Rails を使用していて、html.erb ファイルの 1 つで Ruby コードのブロックを実行する必要があります。私はこのようにしますか:
<% def name %>
<% name = username %>
<%= name %>
またはこのように:
<% def name
name = username %>
<%= name %>
読んでくれてありがとう。
Ruby on Rails を使用していて、html.erb ファイルの 1 つで Ruby コードのブロックを実行する必要があります。私はこのようにしますか:
<% def name %>
<% name = username %>
<%= name %>
またはこのように:
<% def name
name = username %>
<%= name %>
読んでくれてありがとう。
ビューに追加の関数が必要な場合は、通常、ヘルパー内でそれらを宣言します。
コントローラーごとに、ヘルパーがあれば自動的にロードされます。たとえば、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>
しかし、私はこの問題についてさまざまな意見を聞くことに常に非常に興味を持っています。
ERB ファイルでメソッドを定義することは珍しいので、私はそれをお勧めしません。
のようなブロックを呼び出したい場合は#each
、次のようにすることができます。
<% names.each do |name| %>
<%= name %>
<% end %>
を忘れないでください<% end %>
。