在我的Rails應用程序中的創建控制器中的respond_to塊沒有重定向保存成功...我相信這是一個簡單的解決方案,但我對Rails沒有經驗,這是第一個我遇到這個問題的時候。Rails的respond_to重定向不工作
的形式被設定爲使得:遠程=>爲真,並且該控制器被如下...
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
雖然我在所述受試者中,從其他代碼的部條件不會運行,除了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 %>
請注意,我需要在重定向網址中添加引號。
在表單成功時,頁面重定向到根目錄。失敗時,錯誤消息閃爍但表單未刷新 - 用戶輸入的任何答案仍然存在。
哇!謝謝,這是一個美妙的解釋! – skwidbreth
這真的很棒,我不會想到我自己。感謝您爲Rails新手提供指導。 – skwidbreth
我編輯了我的問題,根據您的指導顯示我提出的答案。我不得不調整一些東西,但它完美的作品。 – skwidbreth