如何在rails中获得完整的URL?
url_for @book只返回像/ book/1这样的路径而不是www.domain.com/book/1
谢谢(如果答案很明显,那就很抱歉.我正在学习铁路!)
And*_*ell 64
根据文档,这不应该发生.您正在寻找的选项是:only_path默认情况下它是假的.如果将其明确设置为false会发生什么?
url_for(@book, :only_path => false)
Run Code Online (Sandbox Code Playgroud)
虽然你可以使用url_for你应该更喜欢Ryan的方法,你可以 - book_url(@book)完整的网址或book_path(@book)路径.
Cir*_*四事件 13
在Rails 4中,url_for只接受一个参数,因此您需要为该only_path选项传递一个内部显式哈希的数组.
好:
url_for([@post, @comment, {only_path: true}])
Run Code Online (Sandbox Code Playgroud)
坏:
url_for(@post, @comment, {only_path: true})
url_for([@post, @comment], {only_path: true})
Run Code Online (Sandbox Code Playgroud)
从源头抓起,url_for与Array输入只是调用:
polymorphic_url([@post, @comment], {only_path: true})
Run Code Online (Sandbox Code Playgroud)
如@ moose的回答所示.
如@lime所述,only_path通常不需要,polymorphic_url因为您将其与_url _path后缀区分开来.
看来这可行:
url_for(@book)
Run Code Online (Sandbox Code Playgroud)
但事实并非如此。url_for 方法仅接受一个参数,该参数可以是字符串、模型实例或选项哈希。这是相当不幸的,因为您似乎可能需要链接到 @book 并添加 :only_path 或 :host 等选项。
解决这个问题的一种方法是使用 polymorphic_url,即使您的模型(可能)实际上不是多态的,它也会呈现正确的绝对 url:
polymorphic_url(@book, :host => "domain.com")
Run Code Online (Sandbox Code Playgroud)
也许最好的路由是使用命名路由,它是在路由中声明资源或使用 :as 选项时自动为您设置的:
# in routes.rb:
resources :books
# or
get "books/:id" => "books#show", as: :book
# in your view:
book_path(@book, :host => "domain.com")
Run Code Online (Sandbox Code Playgroud)
使用 :host 选项。例如,您可以使用:
url_for(@book, :host => "domain.com")
Run Code Online (Sandbox Code Playgroud)
注意:对于 Rails 3 及更高版本,请使用polymorphic_url代替url_for.
| 归档时间: |
|
| 查看次数: |
28349 次 |
| 最近记录: |