Pregunta

Así que mi formación es en servicios web Java, pero estoy tratando de hacer el movimiento a ROR.

Estoy usando FlexImage para manejar la carga de imágenes y la generación de miniaturas. Seguí la guía y el comportamiento CRUD estaba trabajando bien en un momento dado. Sin embargo, en algún momento, el comportamiento CRUD para uno de mis modelos (Imágenes) estaba roto.

El código de error que estoy recibiendo de vuelta es el siguiente: ActiveRecord::RecordNotFound in ImagesController#show -- Couldn't find Image with ID=#<Image:0x4e2bd74>. En otras palabras, cuando digo rieles para crear / actualizar / destruir, se confunde el objeto con el id. Esto parece indicar que podría haber un problema de enrutamiento. Pensé que la adición de un parcial de imágenes que podría haber sido el problema, pero hacer retroceder los cambios no solucionarlo.

Los siguientes son los nuevos, mostrar y Métodos de actualización del controlador para el modelo de archivo:

      # images_controller.rb

        # ...

      def new
        @image = Image.new

        respond_to do |format|
          format.html # new.html.erb
          format.xml  { render :xml => @image }
        end
      end

    # ...
  def show
    @image = Image.find(params[:id])

    respond_to do |format|
      format.jpg  # show.jpg.erb 
      format.html # show.html.erb
      format.xml  { render :xml => @image }
    end
  end



    # ...

      def create
        @image = Image.new(params[:image])

        if @image.save 
        redirect_to image_url(@image)
        else
        flash[:notice] = 'Your image did not pass validation.'
        render :action => 'new'
        end
      end 
     # ...

Tenga en cuenta que show () es, por supuesto, esperando una identificación apropiada. Aquí está la new.html.erb para cargar una nueva imagen:

# new.html.erb [upload image]
<h1>New image</h1>

<% form_for @image, :html => { :multipart => true } do |f| %>
  <%= f.error_messages %>
  <table><tr><td width="50%">
  <p>
    <%= f.label :filename %><br />
    <%= f.text_field :filename %></p>
  </td>
  <td><p><b>Upload Image</b><br />
    <%= f.file_field :image_file %><br />
    or URL: <%= f.text_field :image_file_url %>
    <%= f.hidden_field :image_file_temp %>
  </td>
  <td>
    <b>Uploaded Image:</b><br />
    <%= embedded_image_tag(@image.operate { |img| img.resize 100 }) if @image.has_image? %>
  </td>
  </tr>

  </table>
  <p>
    <%= f.label :description %><br />
    <%= f.text_area :description %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

<%= link_to 'Back', images_path %>

La parte pertinente de routes.rb son como sigue:

# routes.rb [excerpt]

  map.resources :images
  map.image 'images/:action/:id.:format', :controller => 'images'

Tenga en cuenta también que una nueva imagen hace conseguir realmente subido y el error se lanza sobre redirección a mostrar (que está esperando un identificador válido de params [: id] y no el objeto, que por cualquier razón que está siendo entregado.)

Gracias por su ayuda por adelantado, y por favor, hágamelo saber si algo salta a la vista.

¿Fue útil?

Solución

A partir de mirar el código me parece que el problema puede deberse al uso de image_url(@image) en combinación con la ruta no reparador image.

Es probable que desee quitar la línea

map.image 'images/:action/:id.:format', :controller => 'images'

de su routes.rb.

La línea

map.resources :images

En realidad debería ser suficiente para exponer todas las acciones CRUD en su ImagesController.

Otros consejos

Mi sugerencia es utilizar rubí de depuración y establecer un punto de ruptura derecha antes de la llamada Image.find. Inspeccionar params [: id] y ver lo que realmente es.

Un enfoque más gueto, poner esto antes de la llamada Image.find

logger.info params[:id].class

y ver lo que hay en esa variable. ¿Es posible que usted tiene algún tipo de filtro antes de que se manipularlo?

try

  redirect_to :action => "show", :id => @image

Creo que es una forma más idiomática para codificar la redirección. Y 1 a molf de consejos sobre rutas RESTful.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top