ruby-on-rails - ejemplos - ruby on rails software
URL completa con url_for en Rails (5)
¿Cómo puedo obtener una url completa en los carriles?
url_for @book solo devuelve una ruta como / book / 1 y no www.domain.com/book/1
Gracias (y disculpe si la respuesta es obvia. ¡Estoy aprendiendo rieles!)
En Rails 4, url_for solo toma un argumento , por lo que debe pasar una matriz con un hash explícito dentro de la opción only_path
.
Bueno:
url_for([@post, @comment, {only_path: true}])
Malo:
url_for(@post, @comment, {only_path: true})
url_for([@post, @comment], {only_path: true})
Desde la fuente, url_for
con una entrada de Array
solo llama:
polymorphic_url([@post, @comment], {only_path: true})
como se muestra en la respuesta de @ moose.
Como señala @lime, only_path
generalmente no es necesario para polymorphic_url
ya que se distingue con los sufijos _url
_path
.
Parece que esto funcionaría:
url_for(@book)
Pero no lo hace. El método url_for solo acepta un argumento, que puede ser una cadena, una instancia de un modelo o un hash de opciones. Esto es bastante desafortunado, ya que parece que es posible que deba vincularse a @book y agregar opciones como: only_path o: host también.
Una forma de evitarlo es utilizar polymorphic_url, que generaría la url absoluta correcta aunque su modelo (probablemente) no sea realmente polimórfico:
polymorphic_url(@book, :host => "domain.com")
Quizás la mejor ruta sería utilizar una ruta con nombre, que se configura automáticamente cuando declara recursos en sus rutas o usa la opción: como:
# in routes.rb:
resources :books
# or
get "books/:id" => "books#show", as: :book
# in your view:
book_path(@book, :host => "domain.com")
Según los documentos , esto no debería suceder. La opción que está buscando es :only_path
y es falsa de forma predeterminada. ¿Qué pasa si lo configuras en falso explícitamente?
url_for(@book, :only_path => false)
Si bien puedes usar url_for
, deberías preferir el método de Ryan cuando puedes: book_url(@book)
para una url completa o book_path(@book)
para la ruta.
Si es un recurso RESTful, podrás usar esto:
book_url(@book)
Utilice la opción: host. Por ejemplo, puedes usar:
url_for(@book, :host => "domain.com")