Переопределение Rails по умолчанию date_select - PullRequest
1 голос
/ 24 октября 2010

Итак, я хотел бы переопределить метод date_select по умолчанию (я хотел бы сделать «необязательный / неопределенный» ввод даты).До сих пор я пробовал это:

lib / overrides.rb

ActionView::Helpers::DateHelper::DateTimeSelector.class_eval do
  def build_selects_from_types(order)
    select = ''
    order.reverse.each do |type|
      separator = separator(type) unless type == order.first # don't add on last field
      select.insert(0, separator.to_s + send("select_#{type}").to_s)
    end
    select.insert(0, '<p>HI!!</p>') # or whatever...
    select.html_safe
  end
end

Затем мне потребовались переопределения в нижней части environment.rb, нопри запуске WEBrick я получаю эту ошибку:

~ / .rvm / gems / ruby-1.9.2-p0 / gems / activesupport-3.0.0 / lib / active_support / dependencies.rb: 479:в `load_missing_constant ': ActionView :: Helpers не пропускает постоянную DateTimeSelector!(ArgumentError)

Так что я, очевидно, действительно не знаю, что делаю, но кажется разумным попытаться хотя бы попытаться.

Приведенная выше ошибка означает, что она не может найти класс DateTimeSelector, но я посмотрел на код в ~ / .rvm / gems / ruby-1.9.2-p0 / gems / actionpack-3.0.0 / lib / action_view / helpers / date_helper.rb и я думаю, что у меня есть правильная иерархия модулей.Это потому, что это приватный класс Rails?

Любые мысли приветствуются:)

1 Ответ

4 голосов
/ 24 октября 2010

В Ruby не существует понятия частного класса.Классы никогда не являются частными.

Причина ошибки в том, что путь неверен.Это должно быть

ActionView::Helpers::DateTimeSelector

, а не

ActionView::Helpers::DateHelper::DateTimeSelector

Кстати, то, что вы пытаетесь сделать, является абсолютно плохой идеей.Тот факт, что Ruby дает вам возможность заново открывать классы и методы «patch», не означает, что вы должны делать это для таких настроек.

Вы никогда не должны делать такие шансы для кодовой базы Rails, если только выдействительно знаю, что ты делаешь.Риск состоит в том, чтобы сломать вещи, которые зависят от этого метода.

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

...