2012-09-28 2 views
0

Можно ли добавить скрытое поле ко всем тегам формы? Я пытаюсь сделать это следующим образом:Rails: добавить поле ко всем формам

module ActionView::Helpers::FormTagHelper 

    def form_tag(url_for_options = {}, options = {}, &block) 
    html_options = html_options_for_form(url_for_options, options) 
    if block_given? 
     f = form_tag_in_block(html_options, &block) 
    else 
     f = form_tag_html(html_options) 
    end 
    hidden_f = ActiveSupport::SafeBuffer.new "<input name='n' type='hidden' value='v' /><\/form>" 
    f.gsub!(/<\/form>/, hidden_f) 
    f 
    end 

end 

Но сервер показывает ошибку:

ActionView::Template::Error (Could not concatenate to the buffer because it is not html safe.): 

Как я должен это сделать?

+0

В чем проблема, которую вы хотите решить? – Reactormonk

ответ

3

Это может быть проще переопределить extra_tags_for_form метод, который используется для добавления скрытых полей _method, utf8 и authenticity_token. Нечто подобное может работать:

module ActionView::Helpers::FormTagHelper 
    alias_method :orig_extra_tags_for_form, :extra_tags_for_form 

    def extra_tags_for_form(html_options) 
    orig_tags = orig_extra_tags_for_form(html_options) 
    orig_tags << "<input name='n' type='hidden' value='v' /><\/form>".html_safe 
    end 
end 

Поскольку этот совет предполагает переосмысление частный метод, вы должны быть уверены, чтобы проверить его тщательно в любое время обновить Rails.

+0

Удивительный! Спасибо! – tiktak

+0

Извините, но где вы помещаете этот файл и как его назвать? – etiennepeiniau

+0

@lepnio Я положил его в config/initializers/form_tag_helper.rb – bkaid

2

Попробуйте с

module ActionView::Helpers::FormTagHelper 
    def form_tag(url_for_options = {}, options = {}, &block) 
    html_options = html_options_for_form(url_for_options, options) 
    if block_given? 
     f = form_tag_in_block(html_options, &block) 
    else 
     f = form_tag_html(html_options) 
    end 
    hidden_f = ActiveSupport::SafeBuffer.new "<input name='n' type='hidden' value='v' /><\/form>" 
    f.gsub!(/<\/form>/, hidden_f) 
    f.html_safe 
    end 
end 

gsub! заражает вашу строку с HTML unsafeness.

+0

Ох, html и регулярное выражение. – Reactormonk

+0

@ Tass: Да, но это второе, что нужно исправить. – InternetSeriousBusiness

+0

О, вы правы. Замените, пожалуйста, регулярное выражение со строкой. – tiktak

Смежные вопросы