Railsでは、ビュー内で次のようなことをすることがよくあります
<% if @some_condition_previusly_established_in_a_controller %>
<div class="one">123</div>
<% else %>
<div class="two">something else</div>
<% end %>
それは少し乱雑に見えます。これは、ビューを操作する許容可能な方法ですか?
これをヘルパーメソッドとして書き直す方法を考えられない限り、基本的にはlookingいように見えます。これは、ERBがどのように機能するかということです。これは、Rubyを単純なテキストテンプレートに挿入する最小限の方法であり、必ずしも合理化されたエレガントなものではないためです。
良いニュースは、構文強調表示エディタが通常<% ... %>
ERBブロックはHTMLと視覚的に異なって見えるため、読みやすさが劇的に向上します。
[〜#〜] haml [〜#〜] のような他の表現が作成された理由でもあります。
- if some_condition_previusly_established_in_a_controller
.one 123
- else
.two something else
あなたのビューの1つまたは2つのそのような条件付きロジックについては、それは素晴らしいと思いますが、コードが大きくなり、複数のif..else..end
そして「クラッタ」に見えるので、ロジックをプレゼンターに分離することでビューを大幅にクリーンアップする「プレゼンターパターン」の実装を検討する必要があると思います。
これは、Ryan BatesのRails「Presenter Patterns from scratch」のキャストシリーズです。 http://railscasts.com/episodes/287-presenters- from-scratch 。
やってみました?
<% @some_condition_previusly_established_in_a_controller ? <div class="one">123</div> : <div class="two">something else</div> %>
ビューに多くのタグとHTML要素が含まれている場合、それらをパーシャルに入れ、ロジックをモデルに入れることができます
見る:
<%= render :partial => @model.status %>
<%= render :partial => "file/path/#{@model.status}" %> # if your partial is in some different folder
ステータスが1の場合、_one.html.erbファイルがレンダリングされます
2の場合、ファイル_two.html.erbが自動的にレンダリングされます。
型:
def status
if @some_condition
"one"
else
"two"
end
end
はい、それが標準です(そして、はい、散らかっています)。
よりクリーンな代替手段を探している場合は、チェックアウトしてください: 条件付きタグラッピングインRails/ERB