[解決済み] Railsのショートカットでnot nilとnot emptyをチェックする?
質問
ユーザーのための表示ページがあり、各属性はそのページで、それがnilでなく、空文字列でない場合にのみ表示される必要があります。以下に私のコントローラを示しますが、同じコードの行を書かなければならないのは非常に面倒です。
@user.city != nil && @user.city != ""
というコードを書かなければならないのは非常に面倒です。私は独自のメソッドを作成することにあまり慣れていませんが、どうにかしてこのようなことを行うためのショートカットを作成することはできませんか?
@city = check_attr(@user.city)
? それとも、この手順を短縮する良い方法があるのでしょうか?
users_controller.rb
def show
@city = @user.city != nil && @user.city != ""
@state = @user.state != nil && @user.state != ""
@bio = @user.bio != nil && @user.bio != ""
@contact = @user.contact != nil && @user.contact != ""
@twitter = @user.twitter != nil && @user.twitter != ""
@mail = @user.mail != nil && @user.mail != ""
end
どのように解決するのですか?
これをやってくれるメソッドがあります。
def show
@city = @user.city.present?
end
は
present?
メソッドは
nil
に加えて、内容があるかどうかを調べます。空文字列、スペースやタブで構成される文字列は存在しないものとみなされます。
このパターンは非常に一般的なので、ActiveRecordにはショートカットさえあります。
def show
@city = @user.city?
end
これはほぼ同等です。
注意点として、テスト対
nil
はほとんど常に冗長です。Ruby では論理的に誤った値は 2 つだけです。
nil
と
false
. 変数がリテラルであることが可能でなければ
false
にすることが可能でなければ、これで十分でしょう。
if (variable)
# ...
end
これは、通常の
if (!variable.nil?)
または
if (variable != nil)
のようなものがたまに現れます。Rubyでは、より還元的な表現が好まれる傾向にあります。
比較したい理由のひとつに
nil
であるトライステート変数がある場合です。
true
,
false
または
nil
であり、最後の2つの状態を区別する必要があります。
関連
-
[解決済み] Rubyでnil値をマッピングして削除する方法
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] 特定のキーがハッシュ内に存在するかどうかを確認する方法は?
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
-
[解決済み] RailsのERBにおける<%、<%=、<%#、-%>の違いは何ですか?
-
[解決済み] NOT NILを使ったRailsのWHEREコンディション
-
[解決済み】railsの文字列とtextの違い?
-
[解決済み】Rails: パスヘルパーの出力をコンソールから確認する
-
[解決済み】rubyで変数がnilでも0でもないことを確認する
-
[解決済み】ruby on railsのcollection routeとmember routeの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ActionController::InvalidAuthenticityTokenについて
-
[解決済み] gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] Rubyで変数をインクリメントする [重複]。
-
[解決済み] Paramが無いか、値が空である。ParameterMissing in ResultsController#update
-
[解決済み] Railsでpng画像を文字列形式で表示するには?
-
[解決済み] Ruby on Railsでsimple_formを使うさまざまな方法|何が違うの?
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] ルビーオンレール モデルから明確な値を選択する
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]