如果我允许控制器方法#new
隐式地/默认呈现其对应的视图模板,当我请求/users/password/new
时,我会看到相应的模板,当我请求/users/password/new.zip
时,它是404s。这就是我想要的。
但是,因为我需要将变量传递给模板,所以我明确地调用render
并传递locals
和formats: :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的重置密码屏幕(它位于此路径上)。
感谢。
答案 0 :(得分:1)
我一直使用:
respond_to do |format|
format.html { render :new, locals: { myvar: someval }, formats: :html }
end
但我不能说我已经测试了你正在测试的内容。但它应该只响应HTML。最后formats: :html
也可能是不必要的。