Можете ли вы удалить _snowman в Rails 3? - PullRequest
4 голосов
/ 10 августа 2010

Я создаю приложение на Rails 3 RC.Я понимаю точку за параметром _snowman (http://railssnowman.info/)...however, У меня есть поисковая форма, которая делает GET-запрос к индексу. Поэтому отправка формы создает следующую строку запроса:

? _ Snowman =Search & search = Box

Я не знаю, что поддержка кодировки UTF так же важна, как чистая строка запроса для этой конкретной формы. (Возможно, я просто слишком перфекционист ... хе-хе)каким-то образом удалить параметр _snowman только для этой формы? Я бы предпочел не преобразовывать форму в запрос POST, чтобы скрыть снеговика, но я также предпочел бы, чтобы этого не было в моей строке запроса. Есть мысли?

Ответы [ 3 ]

1 голос
/ 13 января 2011

Вы можете избежать снеговика (теперь отметка) в Rails 3, не используя Rails для формы поиска.Вместо использования form_tag напишите свой собственный, как описано в: Rails 3 Строка запроса UTF-8, отображаемая в URL?

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

0 голосов
/ 30 июля 2014

В Rails 4.1 вы можете использовать опцию :enforce_utf8 => false, чтобы отключить тег ввода utf8.

Однако я хочу использовать это в Rails 3, поэтому я исправил свои Rails. Я положил следующее в каталог config / initializers.

# allow removing utf8 using enforce_utf8, remove after Rails 4.1
module ActionView
  module Helpers
    module FormTagHelper
      def extra_tags_for_form(html_options)
        authenticity_token = html_options.delete("authenticity_token")
        method = html_options.delete("method").to_s

        method_tag = case method
          when /^get$/i # must be case-insensitive, but can't use downcase as might be nil
            html_options["method"] = "get"
            ''
          when /^post$/i, "", nil
            html_options["method"] = "post"
            token_tag(authenticity_token)
          else
            html_options["method"] = "post"
            tag(:input, :type => "hidden", :name => "_method", :value => method) + token_tag(authenticity_token)
        end

        enforce_utf8 = html_options.delete("enforce_utf8") { true }
        tags = (enforce_utf8 ? utf8_enforcer_tag : ''.html_safe) << method_tag
        content_tag(:div, tags, :style => 'margin:0;padding:0;display:inline')
      end
    end
  end
end
0 голосов
/ 10 августа 2010

Я полагаю, что снеговика нужно отправить по проводу, чтобы обеспечить правильное кодирование ваших данных, а это означает, что вы не можете действительно удалить входные данные снеговика из форм.Поскольку он отправляется в вашем GET-запросе, его необходимо добавить к URL-адресу.

Полагаю, вы могли бы написать некоторый javascript для очистки URL-адреса после загрузки страницы поиска или установить перенаправлениена эквивалентный URL минус снеговик.Оба варианта мне не совсем подходят.

Кроме того, не похоже, что есть способ настроить Rails, чтобы он не выводился.Если вы действительно хотите избавиться от этого, вы можете закомментировать эти строки в исходном коде Rails (исправленные патчи внизу railssnowman.info должны привести вас к файлам и номерам строк).Это добавляет некоторые хлопоты по обслуживанию, когда вы обновляете Rails.Возможно, вы можете отправить патч, чтобы отключить его?

РЕДАКТИРОВАТЬ: похоже, они просто переключили его на что-то вроде галочка вместо снеговика .

РЕДАКТИРОВАТЬ: Упс, обратно к снеговику .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...