在Rails中使用url_for的完整URL
如何在rails中获得完整的url?
url_for @book只返回像/ book / 1这样的路径而不是www.domain.com/book/1
谢谢(如果答案很明显,那就很抱歉。我正在学习铁路!)
使用:host选项。 例如,您可以使用:
url_for(@book, :host => "domain.com")
根据文档 ,这不应该发生。 您正在寻找的选项是:only_path
,默认情况下为false。 如果将其明确设置为false会发生什么?
url_for(@book, :only_path => false)
虽然你可以使用url_for
但你可以选择Ryan的方法 – book_url(@book)
获取路径的完整url或book_path(@book)
。
如果它是RESTful资源,您将能够使用它:
book_url(@book)
在Rails 4中, url_for只接受一个参数 ,因此您需要为only_path
选项传递一个内部显式哈希的数组。
好:
url_for([@post, @comment, {only_path: true}])
坏:
url_for(@post, @comment, {only_path: true}) url_for([@post, @comment], {only_path: true})
从源代码中,带有Array
输入的url_for
只调用:
polymorphic_url([@post, @comment], {only_path: true})
如@ moose的回答所示。
正如@lime所指出的那样,对于polymorphic_url
通常不需要only_path,因为您将其与_url
_path
后缀区分开来。
看起来这会起作用:
url_for(@book)
但事实并非如此。 url_for方法只接受一个参数,该参数可以是字符串,模型的实例或选项的哈希。 这是相当不幸的,因为您可能需要链接到@book并添加以下选项:only_path或:host。
解决它的一种方法是使用polymorphic_url,即使您的模型(可能)实际上不是多态的,它也会呈现正确的绝对URL:
polymorphic_url(@book, :host => "domain.com")
也许最好的路线是使用命名路由,在路由中声明资源或使用:as选项时自动为您设置:
# in routes.rb: resources :books # or get "books/:id" => "books#show", as: :book # in your view: book_path(@book, :host => "domain.com")