2009-11-05 9 views
0

J'ai une balise div que je ne veux changer que si une fonction retourne vrai, sinon je veux qu'elle garde le même contenu. J'ai utilisé render: nothing => true mais cela supprime tout.Rails keep if false, render if true

<%= javascript_include_tag :defaults %> 
<div id="x">Hi</div> 
<% form_remote_tag :url => {:action => 'get'}, 
    :update => 'x' do %> 
<%= text_field_tag 'url' %> 
<%= submit_tag "Submit" %> 
<% end %> 



def getImage 
    @img = params[:url] 
    if !verify @img 
     render :nothing => true 
    end 
end 
private 
def verify url 
    return true if url =~ /https?:\/\/.*\.(jpg|png|gif|bmp)$/ 
    return false 
end 

Je veux faire mon code de rails le font

var lastrequest = ""; 

function ajaxObj() { //Returns the ajax object based on browser 
    if (window.XMLHttpRequest) { 
     return new XMLHttpRequest(); //Firefox 
    } else if (window.ActiveXObject) { 
     return new ActiveXObject("Microsoft.XMLHTTP"); //IE 
    } 
} 

window.onload = function() { 
    document.getElementById("Submit").onclick = function() { 
     var request = ajaxObj(); 

     request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
       document.getElementById("imgdisplay").innerHTML = request.responseText; 
       document.getElementById("imgurl").value = ""; 
      } 
     } 

     if (lastrequest != document.getElementById("imgurl").value) { // Makes sure it doesn't request the same image twice 
      var parameters = "url=" + document.getElementById("imgurl").value; 

      request.open("POST", "imageget.php", true); // Sends the ajax request 
      request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      request.setRequestHeader("Content-length", parameters.length); 
      request.setRequestHeader("Connection", "close"); 
      request.send(parameters); 

      lastrequest = document.getElementById("imgurl").value; 
     } 
    } 
} 

Répondre

0

Vous pouvez également supprimer la :update => 'x' partie d'une utilisation du code ci-dessous dans votre contrôleur:

def getImage 
     @img = params[:url] 
     if !verify @img 
       render :nothing => true 
     else 
       render :update do |page| 
        page['x'].replace_html :partial => <some partial here> 
       end 
     end 
end 

Ou, un peu plus bref:

def getImage 
     @img = params[:url] 
     render :update do |page| 
      page['x'].replace_html(:partial => <some partial here>) if verify(@img) 
     end 
end 

Salue

+0

C'était vraiment proche, mais il le fait toujours vide s'il échoue. – deuces