pasar una imagen de clip de papel del controlador a una vista en rieles

Tengo un modelo que tiene una imagen adjunta que quiero pasar a través de un controlador a una vista. Esta es la forma en que lo he intentado yo mismo, pero no funciona:

Modelo:

class CustomForm < ActiveRecord:Base
    has_attached_file :background_image,
      :storage => :s3,
      :bucket => "asdf",
      ...

    belongs_to  :project

Controlador:

class FormsController < ApplicationController
    before_filter :get_project

    def show
        @form = @project.forms.find(params[:id])
        @bg_image = @form.background_image.url
    end

    def get_project
        @project = current_account.projects.find(params[:project_id])
    end

Vista

<html>
    <head>
    </head>

    <body>
        <%= image_tag @bg_image %>
    </body>
</html>

Esto crea un error "no se puede convertir nil en String" y apunta a la línea "<%= image_tag @bg_image %>", y asumo que @bg_image es nulo. Entonces, ¿qué estoy haciendo mal aquí?

preguntado el 27 de julio de 12 a las 23:07

Is @project esta bien configurado? Si es así, es @form.background_image nulo o tiene un valor? -

Estoy bastante seguro de que es porque la variable @form funciona bien:

Hmm, bueno, tengo curiosidad por saber por qué. @bg_image no estaba funcionando pero @form.background_image.url es. -

1 Respuestas

Es posible que deba evaluar la línea image_tag:

<%= eval("image_tag #{@bg_image}")

Dado que no está guardando nada al tener @bg_image configurado en el controlador, puede hacerlo con la misma facilidad. :

<%= image_tag @form.background_image.url %>

Lo que probablemente generará un nanosegundo más rápido y se verá mucho más limpio.

Respondido 28 Jul 12, 00:07

hacer <%= image_tag "#{@bg_image}" %> funcionó pero la imagen no está definida - Huub mons

Eso no funcionará, porque solo será un objeto de texto, por lo que debe colocarlo dentro de una evaluación. - carson cole

Pero, ¿por qué incluso hacer esto? ¿Usar solo la segunda opción? - carson cole

No hay razón para usar eval. Si el objeto es nulo, no importa cómo se invoque el método; todavía fallará. - colin r

Sí, la segunda opción funciona. Simplemente no entiendo por qué la forma en que lo estaba haciendo, @bg_image fue nulo - Huub mons

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.