在我的 routes.rb
我有以下内容:
get "contact" => "inquiries#new"
所以当我去
/contact
在浏览器中,它调用 InquiriesController
的new
行动。现在,当我尝试调用
render "new"
在 InquiriesController
内部的创建操作中:def create
…
render "new"
end
浏览器中生成的 url 为
/inquiries
.除了调用
redirect_to
还有什么办法吗?至render "new"
但网址为 /contact
在浏览器中?
最佳答案
简短的回答是否定的。原因如下:render
不同于 redirect_to
.当你写 redirect_to :action
,您正在发起一个全新的浏览器请求。 Rails 堆栈被命中,再次搜索路由并执行相应的操作。它与在地址栏中输入 url 并按 enter 完全相同。
另一方面,当您使用 render
,您正在告诉当前请求使用哪个 View 。因此,地址栏中的地址通常是您正在调用的操作 render
.那是因为你输入了一个地址,然后你告诉 rails 在同一个请求中显示不同的页面。
简而言之,而 redirect_to
开始一个全新的请求周期,render
只需将默认 View 替换为您在同一请求周期中选择的 View 。
因此,如果您希望更改地址栏,则必须向所需地址发起新请求。可以通过手动输入地址、单击指向该地址的链接或从 Rails 重定向到该地址。
希望这可以帮助。
关于ruby-on-rails - Rails 将 "action"呈现为自定义 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18077066/