それぞれ...またはその他
each
が大好きです 、しかし私はそれに問題があります。 空のコレクションがあるとどうなりますか?
[].each
を呼び出す場合 、何も起こらず、[]
返されます。時々、それはあなたが望むものです。 ただし、特にUIを構築する場合は、空のリストを特別な方法で処理する必要があります。 たとえば、データがない場合は通常、別のメッセージを表示したいと思います。
しかし、[].each
以降 []
を返します 、nil
ではありません 、あなたはこのようなものを書くのに行き詰まっています:
<% if @users.empty? -%>
<p>You don't have any users. <%= link_to "Add one!", new_user_path %></p>
<% else -%>
<% @users.each do |user| -%>
<p><%= user.name %></p>
<% end -%>
<% end -%>
それは機能しますが、ぎこちなく感じます。むしろ、「このコレクションの各アイテムに対して、何も含まれていない場合を除いて、このことを実行してください。その場合は、この他のことを完全に実行してください。」 each
のようなものが欲しい 、「またはその他」を使用します。
ビュー内では、Railsが役立ちます。もののコレクションをレンダリングするのに最適です:
<%= render @users %>
<p><%= user.name %></p>
render
の場合 @users
が渡されます 、_user.html.erb
をレンダリングします @users
内のユーザーごとに1回 。 each
はスキップできます 完全に。
ボーナスとして、@users
空です、render
nil
を返します 、私たちが望むように! したがって、これを記述して、元のバージョンと同じ出力を取得できます。
<%= render(@users) || render('empty') %>
<p><%= user.name %></p>
<p>You don't have any users. <%= link_to "Add one!", new_user_path %></p>
Railsの規則を理解すれば、はるかに直接的になります。
ビューの外側はどうですか?
Railsをフォローしている場合は、render
コレクションを使用することは、オブジェクトのコレクションをレンダリングするための高速で強力な方法です。
ただし、各アイテムをレンダリングするために余分な部分を処理したくない場合があります。またはrender
あなたのデザインをサポートしません。または、ビューの中にいることすらありません。
私がこれまでに見つけた最善の解決策は、presence
。
list.presence
と同じです:
if list.present?
list
else
nil
end
つまり、リストに何かが含まれている場合はリストが返され、nil
空の場合。
presence
を使用 、あなたは書くことができます:
@users.each do |user|
puts user.name
end.presence || puts("You don't have any users.")
@users
にユーザーがいる場合、これはそれぞれの名前を出力します 、またはYou don't have any users
それ以外の場合。
それでも、presence
がなくてもできました 。それは1つなので、ハックのように感じます。サポートされている場合は、次のような方が良いかもしれません:
@users.each do |user|
puts user.name
end || puts("You don't have any users.")
またはSmalltalkっぽい:
@users.each(if_empty: lambda { puts "You don't have any users." }) do |user|
puts user.name
end
または(ガスプ!):
for user in @users
puts user.name
else
puts "You don't have any users."
end
ただし、今のところ、私は通常presence
を使用します または、空白の場合は基本的なif blank?; else each
パターン。
どちらが良いと思いますか?空のリストをどのように処理しますか?より良い方法を見つけましたか?もしそうなら、それについて教えてください!
-
JavaScriptの条件文
JavaScriptには3種類の条件文があります- ステートメントの場合 − ifステートメントは、特定の条件が満たされた場合にのみ、ifブロック内のコードを実行するために使用されます。 Ifelseステートメント − If….Elseステートメントは、2つの条件のみをチェックし、それぞれに対して異なるコードを実行するために使用されます。 if elseifelseステートメント −if…elseif…elseステートメントは、3つ以上の条件をチェックするために使用されます。 以下は、JavaScriptで条件文を実装するためのコードです- 例 <!DOCTYPE html&
-
IFコマンド...SQLServerのELSE
他のプログラミング言語と同様に、SQL ServerもユーザーにIFコマンドELを提供します。この記事では、構文の使用方法と明確な例を詳しく説明し、IFを想像しやすくします。 。その他。 説明 SQL Serverでは、IFステートメント。 ELSEは、条件付き命令を実行するために使用されます。正しいコマンドがコマンドを実行した場合、失敗した場合は別のコマンドを実行します。 IFの使用構文。 ELSE IFブランチステートメントを使用します。 SQL ServerのELSEでは、次の構文を使用します。 IF dieukien {. statement executed when c