2010-05-15 6 views
3

Je suis en train de créer une application Rails qui effectue le suivi des conversions sur des sites externes. Je voudrais autoriser les utilisateurs à coller une balise d'image dans leurs pages de conversion (comme AdWords), et chaque fois qu'une image est demandée, une conversion est enregistrée dans mon application.Retour d'un .gif 1x1 en tant que réponse dans Rails

respond_to do |format| 
    if @conversion.save 
    flash[:notice] = 'Conversion was successfully created.' 
    format.html { redirect_to(@conversion) } 
    format.xml { render :xml => @conversion, :status => :created, :location => @conversion } 
    format.js { render :json => @conversion, :status => :created } 
    format.gif { head :status => :ok } 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @conversion.errors, :status => :unprocessable_entity } 
    end 
end  

De cette façon, le navigateur obtient une image .gif inexistante. Y a-t-il une meilleure manière de faire cela?

+0

Inexistante ou cassé? –

Répondre

3

option simple:

format.gif { redirect_to '/images/1x1.gif' }

Je pense que dans/vraiment/anciens navigateurs peut ne pas fonctionner (IE5, Netscape peut-être?) , donc si vous avez besoin de les supporter, la solution de l'ancienne école consistait à charger les données binaires du gif et à les cracher directement au navigateur avec le type de contenu correct.

+0

Cela fonctionne maintenant très bien pour moi – Avishai

0

Voici ma solution

format.gif { send_data Rails.root.join('app', 'assets', 'images', '1x1.gif') } 
4

Cela semble être une solution plus simple

Source:

http://forrst.com/posts/Render_a_1x1_Transparent_GIF_with_Rails-eV4 

au lieu de rendre, appelez

send_data(Base64.decode64("R0lGODlhAQABAPAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="), :type => "image/gif", :disposition => "inline") 
Questions connexes