Question

Donc, mon arrière-plan est dans les services Web Java, mais je suis en train de faire la transition vers ROR.

J'utilise Fleximage pour gérer et téléchargement d'images génération de vignettes. J'ai suivi le guide et le comportement CRUD fonctionnait très bien à un moment donné. Cependant, à un moment donné, le comportement CRUD pour un de mes modèles (images) était cassé.

Le code d'erreur que je reçois est de retour comme suit: En d'autres termes ActiveRecord::RecordNotFound in ImagesController#show -- Couldn't find Image with ID=#<Image:0x4e2bd74>., quand je dis Rails pour créer / mettre à jour / détruire, il est source de confusion l'objet avec l'id. Cela semble indiquer qu'il pourrait y avoir un problème de routage. Je pensais que l'ajout d'une partie des images aurait pu être la peine, mais annuler les modifications ne pas le réparer.

Voici les nouvelles méthodes d'exposition et mise à jour du contrôleur pour le modèle Images:

      # 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 
     # ...

Notez que show () est, bien sûr, en attendant un id approprié. Voici le new.html.erb pour le téléchargement d'une nouvelle image:

# 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 partie pertinente de routes.rb sont les suivants:

# routes.rb [excerpt]

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

Notez également qu'une nouvelle image ne get téléchargé en fait et l'erreur est jeté sur redirect pour montrer (qui attend une pièce d'identité valide dans params [: id] et non l'objet qui, pour une raison quelconque il est remis).

Merci pour votre aide à l'avance, et s'il vous plaît laissez-moi savoir si quelque chose vous saute au visage.

Était-ce utile?

La solution

En regardant le code, il me semble que le problème peut être causé par l'utilisation en combinaison avec image_url(@image) la route non RESTful image.

Vous voudrez probablement supprimer la ligne

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

de votre routes.rb.

La ligne

map.resources :images

devrait effectivement être suffisant pour exposer toutes les actions CRUD dans votre ImagesController.

Autres conseils

Ma suggestion est d'utiliser-debug rubis et définir un droit de point de rupture avant l'appel Image.find. Inspectez params [: id] et voir ce qu'il est en réalité.

Une approche plus ghetto, le mettre avant l'appel Image.find

logger.info params[:id].class

et voir ce qui est dans cette variable. Est-il possible que vous avez une sorte de filtre avant qui le manipuler?

essayer

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

Je pense que ce d'une manière plus idiomatiques à coder la redirection. Et +1 à Molf de conseils sur les itinéraires RESTful.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top