在我,routes.rb我有以下内容:
get "contact" => "inquiries#new"
Run Code Online (Sandbox Code Playgroud)
因此,当我进入/contact浏览器时,它会调用它InquiriesController的new动作.
现在,当我尝试调用render "new"内部的create动作时InquiriesController:
def create
…
render "new"
end
Run Code Online (Sandbox Code Playgroud)
浏览器中生成的URL是/inquiries.
有没有办法除了打电话redirect_to,render "new"但有/contact浏览器中的网址?
Aka*_*wal 12
简短的回答是否定的.这就是为什么:
render不同于redirect_to.当您编写时redirect_to :action,您正在发起一个全新的浏览器请求.命中轨道堆栈,再次搜索路由并执行相应的操作.它与在地址栏中输入url并按Enter键完全相同.
另一方面,当您使用时render,您将告知当前请求使用哪个视图.因此,地址栏中的地址通常是您要呼叫的操作render.那是因为你放了一个地址,然后告诉rails在同一个请求中显示不同的页面.
简而言之,在redirect_to开始一个全新的请求周期时,render只需用您在同一请求周期中选择的内容替换默认视图.
因此,如果您希望更改地址栏,则必须向所需地址发起新请求.它可以通过手动输入地址,单击指向该地址的链接或从rails重定向到该地址.
希望这可以帮助.
解决方案是使用自定义路由,如果使用Restful路由,只需将此行添加到routes.rb:
resources :inquiries, path: "contact", as: :inquiries, only: [:create]
Run Code Online (Sandbox Code Playgroud)
在这里,你告诉Rails默认改变URL 从 inquiries 到 contact时动作的名称是create
如果您希望其他操作匹配开头的网址contact,只需将操作名称添加到" 仅 ",例如: only: [:create, :update ...]
如果你想要自定义all你的actions in that controller(查询)就像这样"contact"删除only:
resources :inquiries, path: "contact", as: :inquiries
Run Code Online (Sandbox Code Playgroud)
并且所有查询控制器的路径将从更改/inquiries为/contact
有关如何自定义休息路线的更多详细信息,请查看此链接
| 归档时间: |
|
| 查看次数: |
7639 次 |
| 最近记录: |