tutorial rails que ejemplos descargar curso caracteristicas ruby-on-rails ruby-on-rails-3

ruby on rails - que - ¿Cómo obtengo una URL absoluta para un activo en Rails 3.1?



ruby on rails tutorial (6)

image_path devuelve una ruta (sin host).

El url_for helper no aceptará una sola ruta, por lo que algo como url_for(image_path(''image.png'')) no funcionaría. Si bien el url_for interno en ActionDispatch::Http::Url.url_for parecería ser el truco ( source ), no parece haber una interfaz pública para él.

¿Cómo debo hacerlo? En última instancia, sería bueno tener una función como image_url que funcione como url_for para las rutas para poder llamar a image_url(''image.png'') y obtener la URL absoluta dada todas image_url(''image.png'') .


Desde la URL completa para una ruta de imagen en Rails 3

request.protocol + request.host_with_port + image_path(''image.png'')

Incluso puedes crear un ayudante para SECARlo, algo así como

def full_image_path(img_path) request.protocol + request.host_with_port + image_path(img_path) end


Nuestros activos de producción y puesta en escena están en s3 / cloudfront ... pero no localmente / dev. Así que escribí esto (puede ser exagerado, y probablemente se pueda simplificar):

def get_digest_file(source) return asset_path(source.to_s.downcase) unless Rails.application.config.assets.digests.present? return ActionController::Base.asset_host + "/assets/" + Rails.application.config.assets.digests[source.to_s.downcase] end


Parece que, hasta hace poco, sass-rails ahora interpreta el comando image_url dentro de un archivo scss de la manera esperada, resolviendo a la ubicación final de la imagen en cuestión.


Pruebe esto en su application_helper.rb (de uno de los comentarios en la página de Spike):

def image_url(source) "#{root_url}#{image_path(source)}" end


Puede definir css con url absoluta para cualquier imagen de fondo u otros activos. Entonces puede generarlo dinámicamente siguiendo este Cómo obtener caminos de imagen absolutos en sus archivos CSS usando sass / scss .

CSS

body { background-image: image-url(background.png); }

En tu archivo de entorno, cámbialo con los tuyos

config.action_controller.asset_host = "http://your.domain.com/"

Entonces tu CSS se verá algo así:

body { background-image: url(http://your.domain.com/assets/background.png); }


def image_url(source) URI.join(root_url, image_path(source)) end

De esta forma, obtienes url ya sea usando assets_host o uniéndote con root_url.