41

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

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

4

3 に答える 3

55

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 %>

編集:

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

<%= render :partial => "foo/bar" if !@conditions %>
#becomes
<%= render :partial => "foo/bar" unless @conditions %>
于 2010-03-04T03:08:53.843 に答える
8

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

したがって、あなたの見解は次のようになるかもしれません:

<%= render_stuff_conditionally %>

そしてあなたのヘルパーはこれを制御する方法を持っているでしょう:

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

明らかに物事はより適切に命名されています

于 2010-03-04T02:24:44.943 に答える
2

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

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

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

于 2010-03-04T02:25:22.887 に答える