tutorial rails notidentifiedbyimagemagickerror missingrequiredvalidatorerror game errors ruby-on-rails model paperclip

ruby on rails - notidentifiedbyimagemagickerror - Rails: creación de una URL absoluta en el atributo virtual de un modelo sin url helper



ruby on rails paperclip tutorial (3)

Descubrí que puedes tener ayudantes de URL en modelos con lo siguiente:

class Photo < ActiveRecord::Base include ActionController::UrlWriter def thumb_url thumb_url(self) end end

Sin embargo, cuidado: descubrí que este recogió el HOST, pero no el puerto. Puede investigar ActionController :: default_url_options para obtener más detalles.

Tengo un modelo que tiene archivos adjuntos de clip.

El modelo podría ser utilizado en múltiples aplicaciones de rieles

Necesito devolver una url completa (no relativa) al archivo adjunto como parte de una API JSON que se consume en otro lugar.

Me gustaría resumir el aspecto del clip y tener un atributo virtual simple como este:

def thumbnail_url self.photo.url(:thumb) end

Sin embargo, esto solo me da la ruta relativa. Como está en el modelo, no puedo usar los métodos de ayuda de URL, ¿verdad?

¿Cuál sería un buen enfoque para anteponer la URL raíz de la aplicación ya que no tengo soporte de ayuda? Me gustaría evitar la codificación de algo o agregar código al método del controlador que ensambla mi JSON.

Gracias


En Rails 3.0, la inclusión dada arriba da como resultado una advertencia de obsolescencia.

En Rails 3.0, use el siguiente código para incluir los ayudantes de url:

class Photo < ActiveRecord::Base include Rails.application.routes.url_helpers end


El url helper toma el nombre de host de la solicitud entrante. Un modelo no necesita una solicitud para existir, por lo que no puede usar los ayudantes de URL.

Una solución es pasar el nombre de host de la solicitud al asistente de URL en miniatura.

def thumbnail_url(hostname) self.photo.url(:thumb, :host => hostname) end

Luego llámalo desde tus controladores / vistas como este

photo.thumbnail_url(request.host)

Resulta que realmente no hay una manera infalible de obtener el nombre de host de un servidor. Si un usuario agrega una entrada a su archivo / etc / hosts, puede acceder al servidor con el nombre de host que desee. Si confía en el nombre de host de la solicitud entrante, podría usarse para dividir las miniaturas.

Debido a esto, generalmente codigo el nombre de host de mi sitio en un inicializador. por ejemplo, poner esto en config / initializers / hostname.rb

HOSTNAME = ''whatever''

- editar -

Parece que en los rieles 3 tienes que proporcionar el parámetro: only_path => false para que funcione. Aquí hay un ejemplo de la consola:

>> app.clients_path :host => ''google.com'', :only_path => false => "http://google.com/clients"