hello-world.jp.net
webエンジニアのメモ。とりあえずやってみる。

[Rails]find_or_create_byとfind_or_initialize_by

公開日時

Rails4で確認。

オブジェクトが存在する場合は取得、なければ作成、ということがしたい場合にfind_or_create_byが使うと便利です。

user = User.find_or_create_by(uid: 'sample') # uid = 'sample' のユーザが存在する場合は取得、しなければ新規保存

ですが、find_or_create_byだと新規作成の場合のみ特定の処理をさせたい、といった場合にnew_recordなのかどうか区別がつきません。

その場合は、find_or_create_byではなくfind_or_initialize_byを使います。

user = User.find_or_initialize_by(uid: 'sample') # uid = 'sample' のユーザが存在する場合は取得、しなければ新規作成(未保存)
if user.new_record? # 新規作成の場合は保存
  user.save!
  # 新規作成時に行いたい処理を記述
end

new_record?を使うと新規作成かどうかが区別できるので、新規作成時のみ特定の処理を行うことが可能になります。

参考


Related #Rails

[s3][ruby]静的ウェブサイトホスティングしたサイトのTwitter Cardsが表示されない場合の対応

先日、S3の静的ウェブサイトホスティングを使ってサイト公開を行った際に、ページ表示やFacebookのOGP表示は問題なくできるのにTwitter Cardsだけ表示されない、という現象が発生しました。

[rails]bodyにclassを付けて特定のページでのみjsが動作するようにする

Asset Pipelineを使用するとjsやcssを結合してくれます。

[ruby][rails]pryでデバッグする

今更ながらpryを使ったデバッグの便利さに感動したのでメモ

[ruby][rails]sidekiqのnamespaceにハマった

sidekiq3.0.1で確認。