2011-04-21 16 views
7

Aşağıdaki yardımcı işlevi kullanıyorum, ancak JavaScript ifademdeki tüm özel karakterleri HTML varlıklarına dönüştürerek işe yaramaz ve bozuk çıkıyor. Baska öneri?Özel karakterleri HTML varlıklarına dönüştürme işlemlerini engelle

def link_to_add_fields(name, f, association) 
    new_object = f.object.class.reflect_on_association(association).klass.new 
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| 
     render(association.to_s + "_fields", :f => builder) 
    end 
    link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")) 
    end 

üzerinde bu gibi bir bağlantı (dönüşümleri fark üretir $amp;-" vs:

<a href="#" onclick="add_fields(this, &amp;quot;skills&amp;quot;, &amp;quot;&amp;lt;label for=\&amp;quot;user_skills_attributes_new_skills_name\&amp;quot;&amp;gt;Skill&amp;lt;\/label&amp;gt;\n&amp;lt;input data-autocomplete=\&amp;quot;/users/autocomplete_skills_vocab_name\&amp;quot; id=\&amp;quot;user_skills_attributes_new_skills_name\&amp;quot; name=\&amp;quot;user[skills_attributes][new_skills][name]\&amp;quot; size=\&amp;quot;30\&amp;quot; type=\&amp;quot;text\&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;\n&amp;lt;input id=\&amp;quot;user_skills_attributes_new_skills__destroy\&amp;quot; name=\&amp;quot;user[skills_attributes][new_skills][_destroy]\&amp;quot; type=\&amp;quot;hidden\&amp;quot; value=\&amp;quot;false\&amp;quot; /&amp;gt;&amp;lt;a href=\&amp;quot;#\&amp;quot; onclick=\&amp;quot;remove_fields(this); return false;\&amp;quot;&amp;gt;remove&amp;lt;\/a&amp;gt;&amp;quot;); return false;">Add a Skill</a> 

DÜZENLEME

o dışarı/- Raylar 3 kaldırma saat için()

+2

kopyalamak mı 3. Raylar için güncellemek için gereklidir nasıl çalıştığını bilmeden mi? İpucu: h() ne yapar? –

+0

Tamamen dürüst olmak gerekirse, bir Railscasts bölümünden kod kullanıyorum: http://railscasts.com/episodes/197-nested-model-form-part-2 h() öğesini kaldırdım ve şimdi çalışıyor? Ben Railscast kullanılan neden şaşkın ... – stewart715

+0

Bleh, Ben bir Rails 3 sorun olduğunu düşünüyorum - Bu hızlı düzeltme için teşekkürler Mark .. – stewart715

cevap

7

Raylar 2'de, varsayılan olarak çıkış kaçmadı H() yöntemi bunu yapar. Rails 2 görünümlerinde, genellikle aşağıdakileri görürsünüz:

Bununla birlikte, Rails 3 çıkışında varsayılan olarak varsayılan olarak kaçtı. Artık h() yöntemine ihtiyacınız yok. Çıkarılamayan çıktıyı elde etmek için ham yöntemi kullanmalısınız.

fazla bilgiyi burada bulabilirsiniz: http://railscasts.com/episodes/204-xss-protection-in-rails-3

Yani temelde Raylar 2 kodu ve h (kaldırılmasını aradılar senin durumunda)

İlgili konular