为什么这种渲染格式不限制请求?

时间:2018-06-14 02:55:00

标签: ruby-on-rails ruby

如果我允许控制器方法#new隐式地/默认呈现其对应的视图模板,当我请求/users/password/new时,我会看到相应的模板,当我请求/users/password/new.zip时,它是404s。这就是我想要的。

但是,因为我需要将变量传递给模板,所以我明确地调用render并传递localsformats: :html,以便解决问题我我要形容。所以它看起来像:

render :new, locals: { myvar: someval }, formats: :html(基本上就是这样)

在这种情况下,第一个路径按预期呈现模板,但请求/users/password/new.zip呈现新模板而不是返回404.换句话说,它在new上匹配并忽略扩展名{ {1}},我不想与这条路线相匹配。

您可能会注意到这是一个Devise标准路径,并且代码在路由或配置中没有其他内容(据我所知)应该导致此行为。

我尝试了很多不同的变体,并进行了常规搜索,但未能解决这个问题。

如何调用渲染,以便我能够渲染.zip模板,按照说明将其传递给new仅将响应限制为{{1 } / default types?

所以:

  • locals应该会成功,
  • :html,或除HTML以外的任何其他类型,应为404

正如所解释的那样,后者正在呈现Devise的重置密码屏幕(它位于此路径上)。

感谢。

1 个答案:

答案 0 :(得分:1)

我一直使用:

respond_to do |format|
  format.html { render :new, locals: { myvar: someval }, formats: :html }
end

但我不能说我已经测试了你正在测试的内容。但它应该只响应HTML。最后formats: :html也可能是不必要的。