web-dev-qa-db-ja.com

ビューの.html.erbのelse ifステートメント

Railsでは、ビュー内で次のようなことをすることがよくあります

<% if @some_condition_previusly_established_in_a_controller %>
 <div class="one">123</div>
<% else %>
 <div class="two">something else</div>
<% end %>

それは少し乱雑に見えます。これは、ビューを操作する許容可能な方法ですか?

39
dsp_099

これをヘルパーメソッドとして書き直す方法を考えられない限り、基本的にはlookingいように見えます。これは、ERBがどのように機能するかということです。これは、Rubyを単純なテキストテンプレートに挿入する最小限の方法であり、必ずしも合理化されたエレガントなものではないためです。

良いニュースは、構文強調表示エディタが通常<% ... %> ERBブロックはHTMLと視覚的に異なって見えるため、読みやすさが劇的に向上します。

[〜#〜] haml [〜#〜] のような他の表現が作成された理由でもあります。

- if some_condition_previusly_established_in_a_controller
  .one 123
- else
  .two something else
22
tadman

あなたのビューの1つまたは2つのそのような条件付きロジックについては、それは素晴らしいと思いますが、コードが大きくなり、複数のif..else..endそして「クラッタ」に見えるので、ロジックをプレゼンターに分離することでビューを大幅にクリーンアップする「プレゼンターパターン」の実装を検討する必要があると思います。

これは、Ryan BatesのRails「Presenter Patterns from scratch」のキャストシリーズです。 http://railscasts.com/episodes/287-presenters- from-scratch

9
vee

やってみました?

<% @some_condition_previusly_established_in_a_controller ? <div class="one">123</div> : <div class="two">something else</div> %>
5
ajthewebdev

ビューに多くのタグと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
5
Sunda

はい、それが標準です(そして、はい、散らかっています)。

よりクリーンな代替手段を探している場合は、チェックアウトしてください: 条件付きタグラッピングインRails/ERB

1
Rebitzele