ここで最善のアプローチを行っているかどうかはわかりませんが、検索の完了後に表示し、以前はまったく表示したくないデータブロックがあります。まず、表示するものはありません。次に、参照するモデルがnilであるため、例外がスローされます。
このブロックを部分テンプレートに配置し、レイアウトの適切な場所に追加しました。部分的に条件付きできれいにレンダリングする方法はありますか?この問題に取り組むより良い方法はありますか?
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 %>
簡単な方法の1つは、ヘルパーメソッドを使用することです。ヘルパーは、ロジックをビューに直接配置するよりも少しクリーンになる傾向があります。
したがって、あなたの見解は次のようなものになるでしょう:
<%= render_stuff_conditionally %>
あなたのヘルパーはこれを制御する方法を持っています:
def render_stuff_conditionally
if @contional_check
render :partial => 'stuff'
end
end
明らかに物事がより適切に命名されている場合
私があなたを正しくフォローしていると仮定すると、ビューレベルでこれを行います。
<% if !@my_search_data.nil? %>
<% render :partial => 'foo/bar' %>
<% end %>
お役に立てば幸いです。そうでない場合は、コードの例を投稿してください。