2012-08-27 1 views
0

J'ai actuellement une méthode simple dans mon fichier application_helper.rb, qui est conçu pour ajouter un lien qui va ajouter un nouveau champ à un formulaire lorsque l'on clique dessus. Il ressemble à:Rails - échapper html dans l'aide?

def link_to_add_fields(type, object_form_builder) 
    link_to type, "#", "data-partial" => h(render(:partial => type + '/form', 
         :locals => {type.singularize.to_sym => object_form_builder, 
            :form_actions_visible => false})), 
         :class => 'add_fields' 
end 

Je suis un problème avec ce code, à savoir que la partie qui devrait être ajouté à l'obtenir data-partial attribut html est en cours se sont échappés (probablement par des guillemets quelque part dans le rendu HTML). J'étais d'accord que h() devrait empêcher ceci, mais il ne semble pas le faire. Quelqu'un peut-il suggérer comment échapper à cela?

EDIT: J'ai essayé d'utiliser la méthode html_safe comme décrit ci-dessous, mais en vain. J'ai réussi à le faire échapper en faisant:

"data-partial" => "'" + render(:partial => type + '/form', :locals => {type.singularize.to_sym => object_form_builder, :form_actions_visible => false}) + "'" 

mais je ne suis pas sûr que ce soit en sécurité?

EDIT 2: l'échappement à l'aide de guillemets simples n'est pas bon - bien qu'il échappe au html, il sort les guillemets lorsque le partiel est rendu, ce qui n'est pas souhaitable. Toujours à la recherche d'idées sur la façon d'échapper le html avec succès lors du rendu partiel.

Répondre

4

Essayez une méthode .html_safe

def link_to_add_fields(type, object_form_builder) 
    link_to type, "#", "data-partial" => h(render(:partial => type + '/form', 
         :locals => {type.singularize.to_sym => object_form_builder, 
            :form_actions_visible => false})).html_safe, 
         :class => 'add_fields' 
end