4

RailsビューでNilをチェックするための適切なショートカットを探しています。これについてSOに関する他の質問を見てきましたが、これを私が望むほど単純化していないようです。私が望むのは""、特定の値が nil の場合は空の文字列を返し、それ以外の場合は値を返す短い構文です。

ここで私が試してみたいと思う提案があります。基本的に、次のようなステートメントを許可します。

user.photo._?.url

- また -

user.photo.url._?

これは良い考えですか、それとも危険をはらんでいますか?

私の他のオプションは、モデルで nil を処理することですが、それはグローバルすぎるようです。

4

5 に答える 5

5

tryオブジェクトで提供されたメソッドを実行し、問題のオブジェクトが nil でない場合に値を返すメソッドを確認する必要があります。それ以外の場合は、単に nil を返します。

# We have a user model with name field
u = User.first

# case 1 : u is not nil
u.try(:name)
=> Foo Bar

# case 2 : u is nil
u.try(:name)
=> nil

# in your case
user.photo.try(:url)

詳細については、このブログ投稿をご覧ください。

于 2012-08-05T17:47:16.280 に答える
3

これを実現する慣用的な Ruby の方法は演算子です。これは、左側の式が(または)||の場合に右側の式の値を返します。nilfalse

puts(user.photo.url || '')

ある程度の経験を積んだ Ruby プログラマーなら、それが何をするのかを正確に理解するでしょう。カスタム メソッドを作成する場合は_?、そのメソッドの目的を調べて、そのメソッドが何をするのかを覚えておき、常に正しいことを行うことを期待する必要があります。一般的に、慣用的なコードに固執する方が、あちこちでいくつかのキーストロークを節約するよりもはるかに有益であることがわかります。

于 2012-08-05T17:58:02.000 に答える
0

nilを使用するのはどうですか?

someObject.nil? # true if someOBj is nil

それとも私はあなたが欲しいものを誤解していますか?

于 2012-08-05T17:40:24.027 に答える
0

写真がnilの場合、両方のステートメントが「未定義のメソッド」を返す必要があるため、オプションに問題があると思われます。

'.nil?'をチェックする必要はありません。チェックがコントローラーではなくビューにあることを示唆しているので、@ instance変数をチェックしていると思います。これは、未定義の場合は常にnilになります。だから、ただやってください:

if @someObject
  ...
else
  ...

コントローラに条件を設定する場合は、@ instance変数を使用するだけで、未定義の場合は常に少なくともnilになります。

于 2012-08-05T17:45:59.837 に答える