this one is killing me. all i want to do is validate the format of user-entered software versions. so in the model i have: validates_format_of :version, :message=>"Not valid version number." :with=>/[0-9]\.[0-9]{2}\.[0-9]{2}\.[0-9]{2}\.[0-9]{2}/ the form field is simply the scaffold form code: <p><label for="build_version">Version</label><br/> <%= text_field ''build'', ''version'' %></p> putting in a correctly-formatted number, i.e. 4.11.43.22.55, works and the record is saved. however putting junk in the field gives me: You have a nil object when you didn''t expect it! You might have expected an instance of Array. The error occured while evaluating nil.inject Huh? So I go to the console and create a new object:>> b=Build.new(:product_id=>34, :version=>"this won''t work", ...) >> b.save==>false>> b >> #<Build:0x37a4480 @errors=#<ActiveRecord::Errors:0x37a2230errors={"version"=>["Must be valid."]},..... [other stuff...] so obviously if i''m getting the error message, the validation is being processed by the model. so why the weird ''nil object'' error in the view? the form is all stock scaffolding, no modifications whatsoever. btw, i just tried validates_presence_of on another field, and i get the same exact behaviour. so i *know* i''m missing something simple here. what is it?! 1/2 day supply of pepcid ac for any assistance. thanks! -- Posted via http://www.ruby-forum.com/.
Paste the whole error message. My first guess it that the problem is in your view and not your model. Do you use any lists to populate drop down boxes? If so be sure to reload them before going back to the view. -Nick On 3/10/06, dave davidson <datapanix@gmail.com> wrote:> this one is killing me. all i want to do is validate the format of > user-entered software versions. so in the model i have: > > validates_format_of :version, > :message=>"Not valid version number." > :with=>/[0-9]\.[0-9]{2}\.[0-9]{2}\.[0-9]{2}\.[0-9]{2}/ > > the form field is simply the scaffold form code: > > <p><label for="build_version">Version</label><br/> > <%= text_field ''build'', ''version'' %></p> > > putting in a correctly-formatted number, i.e. 4.11.43.22.55, works and > the record is saved. however putting junk in the field gives me: > > You have a nil object when you didn''t expect it! > You might have expected an instance of Array. > The error occured while evaluating nil.inject > > Huh? So I go to the console and create a new object: > >> b=Build.new(:product_id=>34, :version=>"this won''t work", ...) > >> b.save > ==>false > > >> b > >> #<Build:0x37a4480 @errors=#<ActiveRecord::Errors:0x37a2230 > errors={"version"=>["Must be valid."]},..... [other stuff...] > > so obviously if i''m getting the error message, the validation is being > processed by the model. so why the weird ''nil object'' error in the > view? the form is all stock scaffolding, no modifications whatsoever. > > btw, i just tried validates_presence_of on another field, and i get the > same exact behaviour. so i *know* i''m missing something simple here. > what is it?! 1/2 day supply of pepcid ac for any assistance. > > thanks! > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
Anthony Green
2006-Mar-12 18:01 UTC
[Rails] nil.inject + validation + select menus = bug in rails ?
> Do you use any lists to populate drop down boxes? If so be sure to > reload them before going back to the view.I''m getting a similar problem to Daves and yes I have drop down boxs. But its a very strange error and I was wondering if its a bug in rails. I was using Rails 1.0 now frozen_edge. I submit data from a form to save a new object but the form is empty. The validation methods of the class don''t execute instead the nil.inject error is occurring. If I remove all validation methods from the class then no nil.inject error occurs. If the fields that need validating are filled in then no nil.inject error occurs. How do you reload the drop down menus in the view as Nick suggests ? Tony -- Posted via http://www.ruby-forum.com/.
Anthony Green
2006-Mar-12 18:17 UTC
[Rails] Re: nil.inject + validation + select menus = bug in rails ?
> How do you reload the drop down menus in the view as Nick suggests ?I tried adding a instance variable that holds the collection that populates the select menu to the create method in the objects controller and that fixed it. So if you have a lookup table you use to populate the options of a select menu make sure you add them to the create method as well as the new method and the edit method. Is there a reason why render :action => new doesn''t do this ? Tony -- Posted via http://www.ruby-forum.com/.
dave davidson
2006-Mar-12 20:54 UTC
[Rails] Re: nil.inject + validation + select menus = bug in rails ?
Anthony Green wrote:> >> How do you reload the drop down menus in the view as Nick suggests ? > > I tried adding a instance variable that holds the collection that > populates the select menu to the create method in the objects controller > and that fixed it. > > So if you have a lookup table you use to populate the options of a > select menu make sure you add them to the create method as well as the > new method and the edit method.Brilliant... added the collection to the create method and all works perfectly now!> > Is there a reason why render :action => new doesn''t do this ?I''m with Tony on this one. Looking at the scaffold code for the create method, if the object does not save, the ''new'' action is rendered. So, if the instance variable for the drop-down collection is defined in ''new'', why would rails complain about nil? What specifically is it about adding validations to the model that is gumming up the works? I would imagine that if you dont, in this case, add the appropriate collection for the drop-down to both the ''new'' *and* ''create'' methods, the nil error would appear regardless of whether validation is present. However, this is not the case. In my-- and presumably Tony''s-- code, the additional instance variable definition was not present in the ''create'' method yet no error was thrown when a record was added to the database. Only after validation was added did this behaviour occur. -- Posted via http://www.ruby-forum.com/.
Seemingly Similar Threads
- qemu-kvm rebuild in Centos for oVirt in SIG Virt
- [btrfs-progs 1/4] Add man/mkfs.btrfs.8.in
- Ampersand Heartburn
- You are right and the problem is solved. Re: about the possible errors in Rgraphviz Package
- Nasty pitfall: don''t use ^ and $ in validation regexes!