元から短くかけるのにリファクタリングとはなんだともいえるのですが、Rubyっぽい書き方が少々わかってきたのと、いろいろな機能を付けたくなったのでやっています。
<%= “<b>date: </b>#{@app.date}” if @app.date %>
こういう書き方をするとなぜか<b>date: </b>の部分が表示されてしまうのです。@app.dateに何か残っているのか、nilと0の違いも吸収して判別式を短く書く書き方を教えてくれるとありがたいです。
日々修練、日々体脂肪計、日々連絡先通知待
9月 20th, 2007 by waku
元から短くかけるのにリファクタリングとはなんだともいえるのですが、Rubyっぽい書き方が少々わかってきたのと、いろいろな機能を付けたくなったのでやっています。
<%= “<b>date: </b>#{@app.date}” if @app.date %>
こういう書き方をするとなぜか<b>date: </b>の部分が表示されてしまうのです。@app.dateに何か残っているのか、nilと0の違いも吸収して判別式を短く書く書き方を教えてくれるとありがたいです。
date: #{@app.date}” if @app.date.nil? %>
ではいかんのですか?
試してミルっす。
.nil?
この辺たっぷりありそうですね。
あー違いますね。中身がないときは表示したくないのですね。
“date: #{@app.date}”unless @app.date.empty?
とかどうですかね。
欲しい状態じゃないとき、@app.date が何を返すかに依存しているような気がします。
if @app.date
で回避できないのなら、@app.date の戻り値が空文字列だったりするのかもしれません。それなら String#empty? で検出できると思います。
if @app.date
で検出したければ、@app.date が正しいデータでなければ nil を返すように date メソッドを仕込んでやるのがいいんじゃないでしょうか。
あ、すみません。上のコメントはk3cが書きました。
nil と空文字列、両方ありうるのであれば、
unless @app.date.to_s.empty?
とか。ゼロも検出したければ、
unless @app.date.to_s.empty? || @app.date.zero?
とか。
ありがとうございます。
挙動を試してたところです。
DBの中がNULLと0と空文字の混在だったので(大元はPHPのときに作ったデータだったりします)、きれいにするのと、今入力している途中にきたコメントをやってみます。
あと、もう一つ、@app.dateが#を返すときがあったのですが、dateテーブルのhas_oneがappでappのフィールド名をdateにしてると#が表示されるみたいです。dateをdに変えるとうまく直りました。