使用带有Rails 5的responders gem

时间:2018-03-26 01:04:16

标签: ruby-on-rails ruby-on-rails-5

我使用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,我该怎么做?

2 个答案:

答案 0 :(得分:1)

我不认为问题来自宝石。它紧跟RESTFUL APIRails也是如此。

这意味着创建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的解释。