まえがき
新規ユーザーの登録ページにて情報を登録できたらredirect_to
でトップページへ。
登録できなかった場合はrender
で新規登録ページに遷移するという分岐を設定したかったのですが・・・
登録できても、できなくてもトップページに遷移してしまうという症状に悩んでいました。
解決策が分かったので、記録します。
参照先:
Taroken Fintech様:【Rails】createメソッドとnew+saveメソッドの使い分けを解説
お陰様で解決できました!ありがとうございます!
以下がその時の記述です。
def create
if Prototype.create(prototype_params)
redirect_to root_path
else
render :new
end
end
private
def prototype_params
params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id)
end
end
結論
条件分岐ではcreateメソッドは使わずに、new + saveメソッドを使うこと!
なぜなら
・ createメソッドは保存できる、できないに関わらず戻り値にインスタンスを返すのでtrue扱いになってしまう。
・ saveメソッドは実行結果にtrue、falseを返してくれる。
このように直したらキチンと分岐できました!
def create
@prototype = Prototype.new(prototype_params)
if @prototype.save
redirect_to root_path
else
render :new
end
end
private
def prototype_params
params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id)
end
end
あとがき
createメソッドあれば、saveメソッドは使わないと思っていました・・・