我使用responders gem来清理我的控制器。这是我目前的代码:
class OfficehoursController < ApplicationController
def new
@officehour = Officehour.new
end
def create
@officehour = Officehour.create(officehour_params)
respond_with(@officehour, location: officehours_path)
end
def officehour_params
params.require(:officehour).permit(:end, :start, :status)
end
end
我现在面临的问题是:
当我向create
发送有效参数时,它会按预期重定向到officehours/
,但是当我收到422(验证错误)时,它会将网址从officehours/new
更改为{{1 (但它停留在表单页面... idk为什么)。编辑/更新操作也是如此。
所以,当我收到422错误时,我想留在officehours/
或.../new
,我该怎么做?
答案 0 :(得分:1)
我不认为问题来自宝石。它紧跟RESTFUL API,Rails
也是如此。
这意味着创建office hours
的路径为/officehours
。让我们谈谈你的案子:
成功创建时无话可说。在您的情况下,您将用户重定向到officehours_path
。
当我们创建失败时,我们需要将错误表单重新呈现给用户。但是我们在create
动作中渲染了表单。如上所述,创建的网址为/officehours
,因此您会看到/officehours
而不是officehours/new
为了保留网址/officehours/new
:
/officehours/new
操作设置/officehours
而不是:create
。但是你不应该这样做,我们会打破RESTFUL API
吗?AJAX
创建以保持URL持久化并且您必须处理所有内容,例如:在客户端设置Flash消息,在成功的情况下使用Javascript重定向,在出现故障时呈现表单错误,...而且我不认为宝石会帮助你干掉你的应用程序。希望它有所帮助!
答案 1 :(得分:0)
我不认为这是响应者gem中的问题,因为我在rails应用程序中注意到了相同的问题。这似乎是rails应用程序的默认行为。 看一下这个link的解释。