1

ifこれはステートメントを評価していませんか?

<%= current_user.profile.name || current_user.email if current_user.profile.name.blank? %>

でデバッグcurrent_user.profile.nameすると、空の文字列であることが示されますが、印刷されませんemail。次のような三項演算子に変更します。

<%= current_user.profile.name.blank? ? current_user.email : current_user.profile.name %>

動作しますが、最初の方法が機能しない理由を理解したいと思います。

4

4 に答える 4

2

Ruby では、 onlynilfalsefalse としてカウントされます。空文字列は偽ではないので条件を満たし、||以降は評価されません。

一方、空の文字列をblank?返します。trueそれが、2 つの例の違いです。

于 2013-01-18T06:54:33.027 に答える
1

他の人がすでに指摘しているように、Rubyでは空の文字列は真っぽいので、その余分な文字列が必要な理由を説明していますblank?。そうは言っても、active_supportは痛みを和らげることに熱心であることに注意してくださいObject#presence

<%= current_user.profile.name.presence || current_user.email %>
于 2013-01-18T09:03:30.050 に答える
0

debug oncurrent_user.profile.nameは空の文字列であり、次の条件を意味します

if current_user.profile.name.blank?== false

これは意味します

コード

current_user.profile.name || current_user.email

実行されないため、結果

于 2013-01-18T06:38:51.127 に答える
-2

以下の行:

<%= current_user.profile.name || current_user.email if current_user.profile.name.blank? %>

通訳者はパート1をチェックします。

<%=  current_user.profile.name || 

パート2:

current_user.email if current_user.profile.name.blank? %>

次に、ORステートメントはジレンマを取得し、エラーを出します。2番目のパラメーター(current_user.profile.name.blank?の場合はcurrent_user.email)が使用可能かどうか...

それは私の理解によると...あなたがそれを手に入れることを願っています。

于 2013-01-18T06:58:45.980 に答える