警报闪光消息不适用于 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
。
我在 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
。