Walcząc dalej z tematem wyrzeźbiłem:
[code=ruby]module ActionView
module Helpers
class FormBuilder
alias :old_datetime_select :datetime_select
def datetime_select(method, options = {}, html_options = {})
selects = old_datetime_select(method, options = {}, html_options = {})
if object.respond_to?(:errors) && object.errors[method].count > 0
Base.field_error_proc.call(selects, self)
else
selects
end
end
end
end
end[/code]
Niestety to nie działa i nie mam pojęcia co jest problemem. Wzorowałem się na http://www.apohllo.pl/dydaktyka/ruby/intro/zagadnienia-zaawansowane
W przeglądarce dostaję następujący komunikat:
[code]SystemStackError in Domains#new
Showing /home/tuptus/projekty/ruby/vadmin/app/views/default/domains/_form.html.erb where line #18 raised:
stack level too deep
Extracted source (around line #18):
15:
16:
17: <%= f.label :expire,:class=>‘span-3 label’ %>
18: <%= f.datetime_select :expire, :order=>[:year,:month,:day],:use_short_month => true, :start_year => Time.now.year %>
19:
Trace of template inclusion: app/views/default/domains/new.html.erb
Rails.root: /home/tuptus/projekty/ruby/vadmin
Application Trace | Framework Trace | Full Trace
app/helpers/application_helper.rb:74:in old_datetime_select' app/helpers/application_helper.rb:74:in
old_datetime_select’
app/helpers/application_helper.rb:74:in datetime_select' app/views/default/domains/_form.html.erb:18:in
_app_views_default_domains__form_html_erb__489912941__620319878_453134’
app/views/default/domains/new.html.erb:7:in _app_views_default_domains_new_html_erb___700395837__620243018_0' app/views/default/domains/new.html.erb:3:in
_app_views_default_domains_new_html_erb___700395837__620243018_0’
app/controllers/domains_controller.rb:34:in `new’[/code]
Linia 74 to select = old_datetime_select(method, options = {}, html_options = {}). Wygląda to tak jakby alias zadziałał nie tylko na starą metodę datetime_select ale również na moją. Co robię źle?
Sama metoda działa poprawnie. Pierwotnie nazwałem ją e_datetime_select i przetestowałem bez alias.