在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")