在我的Rails应用程序中,create控制器中的respond_to块在成功保存时没有重定向...我相信这是一个简单的解决方案,但我对Rails缺乏经验,这是我第一次遇到这个问题。
表单被设置为:remote => true,控制器如下...
而且,当我谈到这个话题时,条件语句中else部分的代码也不会运行,除了
我正在使用Rails 4.2.5。有人能帮我理解为什么重定向和警报不起作用吗?谢谢!
编辑以显示解决方案 基于Rich的答案,这是我想出的解决方案:
控制器:
请注意,我需要在重定向 URL 周围添加引号。
在表单成功提交后,页面将重定向到根目录。如果失败,则会闪现错误消息,但表单不会刷新 - 用户输入的任何答案都将保留。
表单被设置为: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。有人能帮我理解为什么重定向和警报不起作用吗?谢谢!
编辑以显示解决方案 基于Rich的答案,这是我想出的解决方案:
控制器:
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 周围添加引号。
在表单成功提交后,页面将重定向到根目录。如果失败,则会闪现错误消息,但表单不会刷新 - 用户输入的任何答案都将保留。