Feed on
Posts
Comments

元から短くかけるのにリファクタリングとはなんだともいえるのですが、Rubyっぽい書き方が少々わかってきたのと、いろいろな機能を付けたくなったのでやっています。

<%= “<b>date: </b>#{@app.date}” if @app.date %>

こういう書き方をするとなぜか<b>date: </b>の部分が表示されてしまうのです。@app.dateに何か残っているのか、nilと0の違いも吸収して判別式を短く書く書き方を教えてくれるとありがたいです。

6 Responses to “Railsアプリ、リファクタリング中”

  1. k3c より:

    date: #{@app.date}” if @app.date.nil? %>
    ではいかんのですか?

  2. waku より:

    試してミルっす。
    .nil?
    この辺たっぷりありそうですね。

  3. 匿名 より:

    あー違いますね。中身がないときは表示したくないのですね。
    date: #{@app.date}”unless @app.date.empty?
    とかどうですかね。
    欲しい状態じゃないとき、@app.date が何を返すかに依存しているような気がします。
    if @app.date
    で回避できないのなら、@app.date の戻り値が空文字列だったりするのかもしれません。それなら String#empty? で検出できると思います。
    if @app.date
    で検出したければ、@app.date が正しいデータでなければ nil を返すように date メソッドを仕込んでやるのがいいんじゃないでしょうか。

  4. k3c より:

    あ、すみません。上のコメントはk3cが書きました。

  5. k3c より:

    nil と空文字列、両方ありうるのであれば、
    unless @app.date.to_s.empty?
    とか。ゼロも検出したければ、
    unless @app.date.to_s.empty? || @app.date.zero?
    とか。

  6. waku より:

    ありがとうございます。
    挙動を試してたところです。
    DBの中がNULLと0と空文字の混在だったので(大元はPHPのときに作ったデータだったりします)、きれいにするのと、今入力している途中にきたコメントをやってみます。

    あと、もう一つ、@app.dateが#を返すときがあったのですが、dateテーブルのhas_oneがappでappのフィールド名をdateにしてると#が表示されるみたいです。dateをdに変えるとうまく直りました。

Leave a Reply