ここで最善のアプローチを取っているかどうかはわかりませんが、検索が完了した後に表示したいデータのブロックがあり、以前はまったく存在していません。まず、表示するものがありません。次に、参照するモデルがnilであるため、例外がスローされます。
このブロックを部分的なテンプレートに配置し、レイアウトの適切な場所に追加しました。部分を条件付きできれいにレンダリングする方法はありますか?この問題に取り組むためのより良い方法はありますか?
ここで最善のアプローチを取っているかどうかはわかりませんが、検索が完了した後に表示したいデータのブロックがあり、以前はまったく存在していません。まず、表示するものがありません。次に、参照するモデルが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 %>
編集:
unless
Rubyでは、の代わりにキーワードを使用することもできます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 %>
お役に立てば幸いです。そうでない場合は、コードの例を投稿してください。