2013-07-22 5 views
32

で.html.erbでelse文場合、私は多くの場合、ビュー内で、私はそれが少しclutteryに見える レールのビュー

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

のようなものをやるような状況に遭遇します。これは、ビューを使って作業するかどうか、受け入れられる方法ですか?

+9

あなたは結果のHTMLコードに追加される空白行を避けるために<% -%>を使用することができます。 –

答えて

19

、あなたは基本的に、それは一種の探して立ち往生しています醜い。 ERBは、Rubyを他のプレーンテキストのテンプレートに注入するための最小限の方法であり、必ずしも合理化されたものではなく、エレガントなものとして意図されたものです。

よく知られているのは、構文強調表示エディタは通常、あなたの<% ... %> ERBブロックをHTMLと視覚的に異なるように見せて、読みやすさを大幅に向上させることです。その構文ははるかに少ない乱雑ですHAMLのような他の表現が作成されている理由

それはまたです:1または2あなたの意見では、このような条件付きロジックについては

- if some_condition_previusly_established_in_a_controller 
    .one 123 
- else 
    .two something else 
+2

そのようなものは私がERBよりHAMLを好む理由です。 HAMLは混乱を取り除きます。 –

+0

私はハムに問題があります(私はスリムを使用しています)。あなたのhtmlコードが不足している場合、HAMLの構文ははっきりと簡潔です。コードが大きいときは面倒になるでしょう。また、いくつかのIDEやプラグインを使用しているときにコードを書式設定することはできません.... – hqt

+0

@hqt HAMLはコードのインラインビットが大きすぎるまではかなり良いですが、それは本当ですが、通常、コードの量を最小限に抑えるヘルパー関数を書くことで軽減できますあなたはあなたのテンプレートにあります。あなたが指摘しているように、他のHAMLのようなメタHTML表記システムもあります。もしあなたがERBに不満があるなら、オプションがあります。 – tadman

1

はい、これが標準です(はい、それはぼやけて見えます)。あなたはおそらくクリーン代替を探しているなら

、チェックアウト:あなたはヘルパーメソッドとしてこれを再書き込みするための方法を考えることができない限りConditional tag wrapping in Rails/ERB

9

を、私はその罰金を推測するが、あなたのコードが取得するとき大きいとあなたは複数のif..else..endを持っていて、 "不透明"に見えます、私はあなたのロジックをプレゼンターに分けることによってあなたの意見を大きく浄化する "Presenter Pattern"の実装を見てください。

私はRyan Bates氏の「Rails Casts」シリーズで、「Presenter Patterns from scratch」の後の素晴らしいチュートリアルです。 http://railscasts.com/episodes/287-presenters-from-scratch

+0

良いリンクですが、有料アカウントなしで私たちのものには見えません。 =( –

+0

私がgithubソースリンクを投稿した場合、私が著作権法に違反した場合、私はソースへのリンクを投稿し、見た目に必要なクラスとファイルを含むように自分の答えを編集しようとします私を追いかけるのではない場合は – vee

+0

[episode 287](https://github.com/ryanb/railscasts-episodes/tree/master/episode-287)のように見えますが、少なくとも彼のレポジ。 –

3

試しましたか?

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

いつでもロジックをコントローラに移動し、ビューをクリーン(er)のままにすることができます。

コントローラー:

if @some_condition 
    @div_class = :one 
    @div_content = 123 
else 
    @div_class = :two 
    @div_content = 'something else' 
end 

ビュー:

<div class="<%= @div_class %>"><%= @div_content %></div> 

またはヘルパーを使用して:

<%= content_tag :div, @div_content, class: @div_class %> 
3

ビューはタグやHTML要素の多くが含まれている場合は、あなたがにそれらを置くことができます部分と論理をモデルに組み込む

ビュー:あなたのステータスが1である場合

<%= render :partial => @model.status %> 

<%= render :partial => "file/path/#{@model.status}" %> # if your partial is in some different folder 

、それはそれが2である場合、それは自動的にファイル_two.html.erbをレンダリングするでしょう

_one.html.erbファイルをレンダリングします。

モデル:

def status 
    if @some_condition 
     "one" 
    else 
     "two" 
    end 
end 
関連する問題