私のRailsアプリの作成コントローラーのrespond_toブロックは、保存が成功してもリダイレクトされません...これは簡単な解決策だと確信していますが、Railsの経験がなく、この問題に遭遇したのはこれが初めてです.
:remote => true となるようにフォームを設定し、コントローラは次のように...
def create
@store = current_user.stores.new(store_params)
respond_to do |format|
if @store.save
format.html { redirect_to root_path }
else
format.html { flash[:alert] = "Save failed! #{@store.errors.full_messages.join(";")}"
render "new" }
format.js {}
end
end
end
そして、私がこの件について話している間、条件のelse部分のコードも実行されません。ただし、例外はformat.js {}
、私の create.js.erb ファイルのコードを実行します (当面はアラート)。
私はRails 4.2.5で作業しています。リダイレクトとアラートが機能しない理由を誰かが理解するのを手伝ってくれますか? ありがとうございました!
ソリューションを表示するための編集 リッチの回答に基づいて、私が思いついたソリューションは次のとおりです。
コントローラ:
def create
@store = current_user.stores.new(store_params)
flash.now[:alert] = "Save failed! #{@store.errors.full_messages.join(";")}" unless @store.save
respond_to do |format|
format.js
end
if @store.save
flash[:notice] = "New store created"
end
end
create.js.erb
<% if flash.now[:alert] %>
$("#alert_holder").empty();
$("#alert_holder").append("<%= j flash.now[:alert] %>");
<% else %>
window.location.href = "<%= root_url %>";
<% end %>
リダイレクト URL を引用符で囲む必要があることに注意してください。
フォームが成功すると、ページはルートにリダイレクトされます。失敗すると、エラー メッセージが点滅しますが、フォームは更新されません。ユーザーが入力した回答はそのまま残ります。