web-dev-qa-db-ja.com

Ruby on Rails:部分的に条件付きで表示する

ここで最善のアプローチを行っているかどうかはわかりませんが、検索の完了後に表示し、以前はまったく表示したくないデータブロックがあります。まず、表示するものはありません。次に、参照するモデルがnilであるため、例外がスローされます。

このブロックを部分テンプレートに配置し、レイアウトの適切な場所に追加しました。部分的に条件付きできれいにレンダリングする方法はありますか?この問題に取り組むより良い方法はありますか?

38
Donald Hughes

Rubyを使用すると、次のような素晴らしいことができます。

<%= render :partial => "foo/bar" if @conditions %>

これを少し読みやすく理解するために、次のように書くことができます。

<%= render(:partial => "foo/bar") if @conditions %>

renderは関数であり、どのパーシャルをレンダリングするかを伝えるハッシュを渡します。 Rubyを使用すると、1行に表示できるため(特にビューの場合、読みやすく簡潔になることが多いため)、if @conditionsセクションは、通常のifステートメントです。次のように行うこともできます:

<% if @conditions %>
  <%= render :partial => "foo/bar" %>
<% end %>

編集:

Rubyでは、unlessの代わりにifキーワードを使用することもできます。これにより、コードがさらに読みやすくなり、否定的な比較を行う必要がなくなります。

<%= render :partial => "foo/bar" if !@conditions %>
#becomes
<%= render :partial => "foo/bar" unless @conditions %>
49
Mike Trpcic

簡単な方法の1つは、ヘルパーメソッドを使用することです。ヘルパーは、ロジックをビューに直接配置するよりも少しクリーンになる傾向があります。

したがって、あなたの見解は次のようなものになるでしょう:

<%= render_stuff_conditionally %>

あなたのヘルパーはこれを制御する方法を持っています:

def render_stuff_conditionally
  if @contional_check
    render :partial => 'stuff'
  end
end

明らかに物事がより適切に命名されている場合

9
Pete

私があなたを正しくフォローしていると仮定すると、ビューレベルでこれを行います。

<% if !@my_search_data.nil? %>
<% render :partial => 'foo/bar' %>
<% end %>

お役に立てば幸いです。そうでない場合は、コードの例を投稿してください。

2
bojo