I want to DRY up my form-for. #new.html.erb <% form_for @organization, :url => organization_path do |f| %> <%= f.label :church_name, "Church Name:" %> <%= f.text_field :church_name, :class => ''input-field'', :size => 30 %> <%= error_message_on :organization, :church_name %> <% end %> with #new.html.erb <% form_for @organization, :url => organization_path do |f| %> <%= text_field_with_errors( :church_name, "Church Name") %> <% end %> # organization_helper def text_field_with_errors( f, display_name, size = 30 ) f.label( method, (display_name + '':'') ) << f.text_field( method, :class => ''input-field'', :size => size ) << error_message_on( f, method ) end But rails throws and error about can put a FormBuilder object into an instance variable. Not quite sure I understand. So, how would I DRY up this form? --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
On 20 Apr 2008, at 02:14, Karl Smith wrote:> > I want to DRY up my form-for. > > #new.html.erb > <% form_for @organization, :url => organization_path do |f| %> > <%= f.label :church_name, "Church Name:" %> > <%= f.text_field :church_name, > :class => ''input-field'', > :size => 30 %> > <%= error_message_on :organization, :church_name %> > <% end %> > > with > > #new.html.erb > <% form_for @organization, :url => organization_path do |f| %> > <%= text_field_with_errors( :church_name, "Church Name") %> > <% end %> >You''re not passing f to your helper function. Fred> # organization_helper > def text_field_with_errors( f, display_name, size = 30 ) > f.label( method, (display_name + '':'') ) << > f.text_field( method, > :class => ''input-field'', > :size => size ) << > error_message_on( f, method ) > end > > But rails throws and error about can put a FormBuilder object into an > instance variable. > > Not quite sure I understand. So, how would I DRY up this form? > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
> You''re not passing f to your helper function.That was a typo on my part when I pasted/cleaned the code for posting. #new.html.erb <% form_for @organization, :url => organization_path do |f| %> <%= text_field_with_errors( f, :church_name, "Church Name") %> <% end %> The exact error is: `@#<ActionView::Base:0x24dda6c>'' is not allowed as an instance variable name I thought you could pass any object to a method. Right? --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
On 20 Apr 2008, at 19:03, Karl Smith wrote:> >> You''re not passing f to your helper function. > > That was a typo on my part when I pasted/cleaned the code for posting. > > #new.html.erb > <% form_for @organization, :url => organization_path do |f| %> > <%= text_field_with_errors( f, :church_name, "Church Name") %> > <% end %> > > The exact error is: > `@#<ActionView::Base:0x24dda6c>'' is not allowed as an instance > variable name > > I thought you could pass any object to a method. Right?Well yes, but that method might not like it (eg trying to evaluate the square root of "cucumber"). I think we need to see exactly what code you''re running. You could have edited out the problem and it''s difficult to work out what''s wrong if what we''re looking at isn''t what is actually being executed. Fred --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
> Well yes, but that method might not like it (eg trying to evaluate the > square root of "cucumber"). I think we need to see exactly what code > you''re running. You could have edited out the problem and it''s > difficult to work out what''s wrong if what we''re looking at isn''t what > is actually being executed.Ok, there is the full code: module OrganizationEventsHelper def text_field_with_errors( f, method, display_name, size = 30, options = {} ) self.label( method, (display_name + '':'') ) << self.text_field( method, :class => ''input-field'', :size => size ) << error_message_on( self, method ) end end <% form_for @organization, :url => organization_events_path do |f| %> <fieldset> <legend>Church Info</legend> <ol> <li><%= text_field_with_errors( f, :church_name, "Church Name") %></ li> </ol> </fieldset> <fieldset class="submit"> <%= f.submit "Create" %> </fieldset> <% end %> Note: I omitted the repetitious code. Error message: ActionView::TemplateError (`@#<ActionView::Base:0x256474c>'' is not allowed as an instance variable name) on line #33 of organization_events/new.html.erb: 30: :size => 30 %> 31: <%= error_message_on :organization, :church_name %></li> 32: 33: <li><%= text_field_with_errors( f, :church_name, "Church Name") %></li> 34: 35: <li><%= f.label :address1, "Address:" %> 36: <%= f.text_field :address1, config/initializers/field_error_patch.rb:29:in `instance_variable_get'' config/initializers/field_error_patch.rb:29:in `error_message_on'' app/helpers/organization_events_helper.rb:9:in `text_field_with_errors'' app/views/organization_events/new.html.erb:33:in `_run_erb_47app47views47organization_events47new46html46erb'' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_view/ helpers/form_helper.rb:248:in `fields_for'' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_view/ helpers/form_helper.rb:184:in `form_for'' app/views/organization_events/new.html.erb:22:in `_run_erb_47app47views47organization_events47new46html46erb'' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_view/ base.rb:637:in `send'' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_view/ base.rb:637:in `compile_and_render_template'' <snip> Let me know if think the whole stack trace would help. Thanks for the help, Fred. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Oops, slight change, I was trying to see if I could self. Doesn''t really matter, either self or just f, neither works. module OrganizationEventsHelper def text_field_with_errors( f, method, display_name, size = 30, options = {} ) f.label( method, (display_name + '':'') ) << f.text_field( method, :class => ''input-field'', :size => size ) << error_message_on( f, method ) end end --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
On 20 Apr 2008, at 19:43, Karl Smith wrote:> > Oops, slight change, I was trying to see if I could self. Doesn''t > really matter, either self or just f, neither works. >So the problem is with error_message_on. the version you called is expecting the first parameter to be the name of an instance variable. You''re all form buildered up, so you just need f.error_message_on(method) (this doesn''t work prior to rails 2) Fred.> module OrganizationEventsHelper > def text_field_with_errors( f, method, display_name, size = 30, > options = {} ) > f.label( method, (display_name + '':'') ) << > f.text_field( method, > :class => ''input-field'', > :size => size ) << > error_message_on( f, method ) > end > end > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
> So the problem is with error_message_on. the version you called is > expecting the first parameter to be the name of an instance variable. > You''re all form buildered up, so you just need > f.error_message_on(method) (this doesn''t work prior to rails 2)Close! I get this error now: ActionView::TemplateError (wrong number of arguments (5 for 2)) on line #33 of organization_events/new.html.erb: 30: :size => 30 %> 31: <%= error_message_on :organization, :church_name %></li> 32: 33: <li><%= text_field_with_errors( f, :church_name, "Church Name") %></li> 34: 35: <li><%= f.label :address1, "Address:" %> 36: <%= f.text_field :address1, /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_view/ helpers/form_helper.rb:672:in `error_message_on'' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_view/ helpers/form_helper.rb:672:in `error_message_on'' I''m on rails 2.0.2. --~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 20 Apr 2008, at 20:02, Karl Smith wrote:> >> So the problem is with error_message_on. the version you called is >> expecting the first parameter to be the name of an instance variable. >> You''re all form buildered up, so you just need >> f.error_message_on(method) (this doesn''t work prior to rails 2) > > Close! I get this error now: > > ActionView::TemplateError (wrong number of arguments (5 for 2)) onThat''s odd - if you get that far it should work. You haven''t got any plugins installed tha might be messing with that have you ?> > line #33 of organization_events/new.html.erb: > 30: :size => 30 %> > 31: <%= error_message_on :organization, :church_name %></li> > 32: > 33: <li><%= text_field_with_errors( f, :church_name, "Church > Name") %></li> > 34: > 35: <li><%= f.label :address1, "Address:" %> > 36: <%= f.text_field :address1, > > /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_view/ > helpers/form_helper.rb:672:in `error_message_on'' > /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_view/ > helpers/form_helper.rb:672:in `error_message_on'' > > I''m on rails 2.0.2. > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Ahh HA! Yes, I had patched the ActionView::Helpers::ActiveRecordHelper / error_message_on method. I didn''t like having the error text wrapped in divs, so I changed it to spans. I copied the ARH method exactly, only changing the <div> to <span>, but it looks like that doesn''t allow it being a form_builder object anymore. But... I fired up ruby-debug and did an inspect on f (that is one monster object). Combing through I found that f.object refers to the model, so (drum roll please): error_message_on( f.object, method) Works! Simple, fix, and I get to keep my span tags. Fred, thanks for sticking through this with me! --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---