[解決済み] Railsのコントローラからレコードが存在するかどうかをチェックする
2023-01-16 01:13:01
質問
私のアプリでは、ユーザーはビジネスを作成することができます。ユーザーが
index
アクションをトリガーすると
BusinessesController
に関連するビジネスかどうかをチェックしたいのです。
current_user.id
:
- はいの場合:事業を表示します。
-
noの場合: リダイレクトして
new
アクションにリダイレクトします。
これを使おうとしていたのですが
if Business.where(:user_id => current_user.id) == nil
# no business found
end
しかし、ビジネスが存在しない場合でも常にtrueを返します...。
レコードがデータベースに存在するかどうかをテストするにはどうすればよいですか。
どのように解決するには?
なぜあなたのコードは動作しないのでしょうか?
このような場合
where
メソッドは
ActiveRecord::Relation
オブジェクト(配列のようなもので、その中に
where
),
は空であっても構いませんが、決して
nil
.
Business.where(id: -1)
#=> returns an empty ActiveRecord::Relation ( similar to an array )
Business.where(id: -1).nil? # ( similar to == nil? )
#=> returns false
Business.where(id: -1).empty? # test if the array is empty ( similar to .blank? )
#=> returns true
少なくとも1つのレコードが存在するかどうかをテストするにはどうすればよいですか?
オプション1。
使用方法
.exists?
if Business.exists?(user_id: current_user.id)
# same as Business.where(user_id: current_user.id).exists?
# ...
else
# ...
end
オプション2です。
使用方法
.present?
(または
.blank?
の反対語である
.present?
)
if Business.where(:user_id => current_user.id).present?
# less efficiant than using .exists? (see generated SQL for .exists? vs .present?)
else
# ...
end
オプション3です。 if文での変数代入
if business = Business.where(:user_id => current_user.id).first
business.do_some_stuff
else
# do something else
end
このオプションは、いくつかのリンター(例えばRubocop)からはコードの匂いとみなされることがあります。
オプション 3b: 変数の割り当て
business = Business.where(user_id: current_user.id).first
if business
# ...
else
# ...
end
また
.find_by_user_id(current_user.id)
の代わりに
.where(...).first
最良の選択肢です。
-
を使用しない場合
Business
オブジェクト(s)を使用します。 オプション1 -
を使用する必要がある場合
Business
オブジェクト(s)を使用します。 オプション 3
関連
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Ruby on Railsのデータベースをパージまたは再作成する
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
-
[解決済み] mysqlのデータベースが存在するかどうかを確認する方法
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み】Rails: モデルがすでに存在するときに`rails generate scaffold`を実行するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コントローラでJSONをレンダリングする
-
[解決済み] Ruby on Railsのランナー
-
[解決済み] Railsです。gemを使った特定バージョンのライブラリのアンインストール
-
[解決済み] Ruby:Rubyの配列にinclude.の反対はある?
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] Railsコントローラからホスト名を取得する
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] ルビーオンレール モデルから明確な値を選択する
-
[解決済み] railsでcheck_boxをcheckedにする方法は?
-
[解決済み] rails/rubyでgroup_byを使用する。