この2つのメソッドは同じような用途で使えますが、どのような使い分けをすればいいのかをまとめてみました。 # File activerecord/lib/active_record/relation.rb, line 222 def find_or_initialize_by(attributes, &block) find_by(attributes) || new(attributes, &block) end find_byとnewの引数に同じattributesが渡される。 なので、下記のようなJOINしたテーブルを検索条件に含めるとActiveRecord::AssociationTypeMismatchの例外が発生する。