Hi there, I''m trying to override the defaults for form_helper. I can see in action_view/helpers/form_helper.rb: class InstanceTag #:nodoc: include Helpers::TagHelper attr_reader :method_name, :object_name DEFAULT_FIELD_OPTIONS = { "size" => 30 }.freeze unless const_defined?(:DEFAULT_FIELD_OPTIONS) DEFAULT_RADIO_OPTIONS = { }.freeze unless const_defined?(:DEFAULT_RADIO_OPTIONS) DEFAULT_TEXT_AREA_OPTIONS = { "cols" => 40, "rows" => 20 }.freeze unless const_defined?(:DEFAULT_TEXT_AREA_OPTIONS) DEFAULT_DATE_OPTIONS = { :discard_type => true }.freeze unless const_defined?(:DEFAULT_DATE_OPTIONS) but if I add a simple declaration in my environment.rb, nothing seems to happen (even after webserver reboot): DEFAULT_FIELD_OPTIONS = { "size" => 30, "class" => "text" } DEFAULT_TEXT_AREA_OPTIONS = { "wrap" => "virtual", "rows" => 3, "cols" => 30, "class" => "input" } do I need to wrap them in a module? I figured not, as they are constants, and should be globally scoped, but I might be very wrong about that... This seems like it should be fairly straightforward, so I must be doing something the wrong way. thanks dorian -- -- I do things for love or money
Maybe because of freeze? ... http://www.ruby-doc.org/core/classes/Object.html#M001425 -- View this message in context: http://www.nabble.com/overriding-constants-t1722951.html#a4680880 Sent from the RubyOnRails Users forum at Nabble.com.
hmmm... I saw that as well, but wasn''t sure if environment.rb got loaded before or after the all of the Action files. If the helper file gets loaded first, then I can''t see a way to override the defaults! puzzelv wrote:> Maybe because of freeze? ... > http://www.ruby-doc.org/core/classes/Object.html#M001425 > -- > View this message in context: http://www.nabble.com/overriding-constants-t1722951.html#a4680880 > Sent from the RubyOnRails Users forum at Nabble.com. > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails-- -- I do things for love or money
oddly enough, I get what I want from script/console:>> DEFAULT_FIELD_OPTIONS=> {"size"=>30, "class"=>"text"}>> DEFAULT_TEXT_AREA_OPTIONS=> {"class"=>"input", "wrap"=>"virtual", "rows"=>3, "cols"=>30} but it seems that const_defined() acts in a modular scope:>> const_defined?(:DEFAULT_FIELD_OPTIONS)NoMethodError: undefined method `const_defined?'' for #<Object:0x402e79c0> from (irb):1 so I tried:>> ActionView.const_defined?(:DEFAULT_FIELD_OPTIONS)=> false>>but then putting this in my environment didn''t help either: module ActionView DEFAULT_FIELD_OPTIONS = { "size" => 30, "class" => "text" } DEFAULT_TEXT_AREA_OPTIONS = { "wrap" => "virtual", "rows" => 3, "cols" => 30, "class" => "input" } end I''m confused now. Dorian Mcfarland wrote:> hmmm... > I saw that as well, but wasn''t sure if environment.rb got loaded before > or after the all of the Action files. > If the helper file gets loaded first, then I can''t see a way to override > the defaults! > > puzzelv wrote: >> Maybe because of freeze? ... >> http://www.ruby-doc.org/core/classes/Object.html#M001425 >> -- >> View this message in context: >> http://www.nabble.com/overriding-constants-t1722951.html#a4680880 >> Sent from the RubyOnRails Users forum at Nabble.com. >> >> _______________________________________________ >> Rails mailing list >> Rails@lists.rubyonrails.org >> http://lists.rubyonrails.org/mailman/listinfo/rails >-- -- I do things for love or money
dorian mcfarland wrote:> oddly enough, I get what I want from script/console: > >>> DEFAULT_FIELD_OPTIONS > => {"size"=>30, "class"=>"text"} >>> DEFAULT_TEXT_AREA_OPTIONS > => {"class"=>"input", "wrap"=>"virtual", "rows"=>3, "cols"=>30} > > but it seems that const_defined() acts in a modular scope: >>> const_defined?(:DEFAULT_FIELD_OPTIONS) > NoMethodError: undefined method `const_defined?'' for > #<Object:0x402e79c0> > from (irb):1 > > so I tried: > >>> ActionView.const_defined?(:DEFAULT_FIELD_OPTIONS) > => false >>> > > but then putting this in my environment didn''t help either: > module ActionView > DEFAULT_FIELD_OPTIONS = { "size" => 30, "class" => "text" } > DEFAULT_TEXT_AREA_OPTIONS = { "wrap" => "virtual", "rows" => 3, "cols" > => 30, "class" => "input" } > end > > I''m confused now.Hi Dorian, You are close, but you got the InstanceTag package wrong. Try this under environment.rb ActionView::Helpers::InstanceTag::DEFAULT_FIELD_OPTIONS = {...custom values...} -- Posted via http://www.ruby-forum.com/.
thanks for that, I also had it working using: class ActionView::Helpers::InstanceTag DEFAULT_FIELD_OPTIONS = { "size" => 30, "class" => "text" } DEFAULT_TEXT_AREA_OPTIONS = { "wrap" => "virtual", "rows" => 3, "cols" => 30, "class" => "input" } end but whichever way I still get the warning: ./script/../config/../config/environment.rb:73: warning: already initialized constant DEFAULT_FIELD_OPTIONS ./script/../config/../config/environment.rb:74: warning: already initialized constant DEFAULT_TEXT_AREA_OPTIONS it seems there''s no way to do it without getting at least a warning. I find it odd that it even lets you do it at all because the initialisation freezes hash, which I thought made it immutable (if that''s the right word) d Herryanto Siatono wrote:> dorian mcfarland wrote: >> oddly enough, I get what I want from script/console: >> >>>> DEFAULT_FIELD_OPTIONS >> => {"size"=>30, "class"=>"text"} >>>> DEFAULT_TEXT_AREA_OPTIONS >> => {"class"=>"input", "wrap"=>"virtual", "rows"=>3, "cols"=>30} >> >> but it seems that const_defined() acts in a modular scope: >>>> const_defined?(:DEFAULT_FIELD_OPTIONS) >> NoMethodError: undefined method `const_defined?'' for >> #<Object:0x402e79c0> >> from (irb):1 >> >> so I tried: >> >>>> ActionView.const_defined?(:DEFAULT_FIELD_OPTIONS) >> => false >> but then putting this in my environment didn''t help either: >> module ActionView >> DEFAULT_FIELD_OPTIONS = { "size" => 30, "class" => "text" } >> DEFAULT_TEXT_AREA_OPTIONS = { "wrap" => "virtual", "rows" => 3, "cols" >> => 30, "class" => "input" } >> end >> >> I''m confused now. > > Hi Dorian, > > You are close, but you got the InstanceTag package wrong. Try this under > environment.rb > > ActionView::Helpers::InstanceTag::DEFAULT_FIELD_OPTIONS = {...custom > values...} >-- -- I do things for love or money
Actually, you can override it with the right statements. The constant is defined as: http://caboo.se/doc/classes/ActionView/Helpers/InstanceTag.html http://caboo.se/doc/classes/ActionView/Helpers/InstanceTag.html DEFAULT_TEXT_AREA_OPTIONS = { "cols" => 40, "rows" => 20 }.freeze unless const_defined?(:DEFAULT_TEXT_AREA_OPTIONS) The key is the "unless const_defined?(...)". It says that the constant should be defined and frozen, UNLESS it is aready defined. How do you define it before ActionView::Helpers::InstanceTag is defined?. Well, just define it at the beginning of environment.rb, however, since neither ActionView, Helpers or InstanceTag is defined yet, we must define them fully with Module/Class...End blocks like this: module ActionView module Helpers class InstanceTag DEFAULT_TEXT_AREA_OPTIONS = { :cols => 60, :rows => 10 } end end end So, just add the code above at the top of your config/environment.rb, and you should be all set and warning-free. I hope this helps someone. Gabriel Medina. http://www.dottut.com/ http://www.dottut.com/ -- View this message in context: http://www.nabble.com/overriding-constants-tf1722951.html#a13741535 Sent from the RubyOnRails Users mailing list archive at Nabble.com. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---