警报闪光消息不适用于 respond_with

Alert flash message not working with respond_with

我在 Rails 4.2 应用程序中使用 responders gem。我遇到了一个非常复杂的情况,在 Organization 模型编辑视图中,我得到了一个带有一个输入的 OrganizationUser 表单。将用户添加到组织会调用 OrganizationUsersController 中的 create 操作。我在那里使用带有重定向操作的响应程序,如下所示:

def create
  @organization_user = @organization.organization_users.create(organization_user_params)
  respond_with @organization_user do |format|
    format.html { redirect_to edit_organization_path(@organization) }
  end
end

还有我的翻译:

flash:
  actions:
    create:
      notice: '%{resource_name} was successfully created.'
      alert: '%{resource_name} could not be created.'
  organization_users:
    create:
      notice: "Member has been added"
      alert: "Validation error"

问题是,如果资源有效并持久保存到数据库,则一切正常。我被重定向到带有适当通知消息的编辑组织视图,但如果验证失败,我将在没有任何警报的情况下被重定向。

我当然可以设置闪光警报消息,除非 @organization_user 持续存在,但这就是使用响应器自动设置闪光的全部意义所在。

尝试:

respond_with @organization_user do |format|
  if @organization_user.valid?
    format.html { redirect_to edit_organization_path(@organization) }
  end
end

好的,我明白了。事实证明,由于验证错误,flash 已正确设置,但它是 flash.now 而不是 flash,并且在 redirect_to 之后 flash 被删除。解决方案是像这样使用 :flash_now => false

respond_with(@organization_user, :flash_now => false) do |format|
  format.html { redirect_to edit_organization_path(@organization) }
end

请注意,要使 config/locales/en.yml 中的闪光灯正常工作,您的控制器顶部需要 responders :flash