代码之家  ›  专栏  ›  技术社区  ›  Victor

Rails中带有URL的完整URL

  •  22
  • Victor  · 技术社区  · 14 年前

    如何在rails中获得完整的url?

    谢谢(如果答案很明显,我很抱歉)。我正在学习rails!)

    6 回复  |  直到 14 年前
        1
  •  2
  •   Joshua Muheim    5 年前

    使用:主机选项。例如,您可以使用:

    url_for(@book, :host => "domain.com")
    

    polymorphic_url 而不是 url_for .

        2
  •  65
  •   Andy Gaskell    14 年前

    根据 the docs ,这不应该发生。你要找的是 :only_path

    url_for(@book, :only_path => false)
    

    当你可以使用 url_for book_url(@book) book_path(@book) 为了这条路。

        3
  •  22
  •   Ryan Bigg Andrés Bonilla    14 年前

    如果它是一个RESTful资源,您可以使用:

    book_url(@book)
    
        4
  •  14
  •   Ciro Santilli OurBigBook.com    9 年前

    在Rails 4中, url_for only takes one argument ,因此需要为 only_path 选项。

    好的:

    url_for([@post, @comment, {only_path: true}])
    

    坏的:

    url_for(@post, @comment, {only_path: true})
    url_for([@post, @comment], {only_path: true})
    

    url_for 带着一个 Array 只需输入调用:

    polymorphic_url([@post, @comment], {only_path: true})
    

    如@moose的回答所示。

    正如@lime所指出的, 通常不需要 polymorphic_url 既然你把它和 _url _path 后缀。

        5
  •  4
  •   a moose    12 年前

    这似乎是可行的:

    url_for(@book)
    

    但事实并非如此。方法的url\u只接受一个参数,可以是字符串、模型实例或选项哈希。这是相当不幸的,因为您可能需要链接到@book并添加如下选项:only\u path或:host。

    polymorphic_url(@book, :host => "domain.com")
    

    # in routes.rb:
    resources :books
    # or
    get "books/:id" => "books#show", as: :book
    
    # in your view:
    book_path(@book, :host => "domain.com")
    
        6
  •  1
  •   sandre89    5 年前

    url_for(only_path: false)
    

    长话短说:

    在Rails 5中, url_for 在一个视图中是 ActionView::RoutingUrlFor#url_for . 如果你看看它的源代码( https://api.rubyonrails.org/classes/ActionView/RoutingUrlFor.html#method-i-url_for super ,从而调用其祖先中同名的方法。

    ActionView::RoutingUrlFor.ancestors 显示它的祖先是 ActionDispatch::Routing::UrlFor .

    检查它的源代码( https://api.rubyonrails.org/classes/ActionDispatch/Routing/UrlFor.html#method-i-url_for ),您将看到:

    缺少的路由密钥可以从当前请求的 放置在路径中)。

    这是非常好的,因为它会自动为您构建当前页面的URL(或者路径,如果您只是调用 的url\u 没有 only_path: false url_for(request.params.merge({arbitrary_argument:'value'})) .