I''ve got a relationship: Person has many MiddleNames and MiddleName belongs to Person In irb I can add a person, add a middle name then call @person.middle_names.first.name to get that middle name. However when I try the exact same code in a view, I get undefined method `name'' for nil:NilClass If I iterate through like so: for mname in @person.middle_names puts mname.name Then it works perfectly, but for some reason using ".first" is failing in the view. I''ve used this method many many times and never come across anything quite like this. I believe I''m probably overlooking some incredibly simple answer and I''m going to kick myself when someone points it out, but for now I''m completely stumpted. Any input appreciated. Thanks Matt
> for mname in @person.middle_names > puts mname.name > > Then it works perfectly, but for some reason using ".first" is failing > in > the view. I''ve used this method many many times and never come across > anything quite like this.".first" is an array method. "mname.name" is an instance of an array... Hope this helps...> I believe I''m probably overlooking some incredibly simple answer and I''m > going to kick myself when someone points it out, but for now I''m > completely stumped.-- Posted via http://www.ruby-forum.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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Sat, Dec 26, 2009 at 11:40:00PM +0100, Pale Horse wrote:> > for mname in @person.middle_names > > puts mname.name > > > > Then it works perfectly, but for some reason using ".first" is failing > > in > > the view. I''ve used this method many many times and never come across > > anything quite like this. > > ".first" is an array method. "mname.name" is an instance of an array... > > Hope this helps...Thanks, but I''ve just noticed something: The error I am getting only appears from my testing with cucumber/rspec/webrat. If I access the page manually through passenger, it all works perfectly. I might contact the cuke list about this as the code is obviously correct, it works fine in irb and in a real browser, just not in the test environment. So much for me sticking to my BDD plans :D Thanks Matt
On Sat, Dec 26, 2009 at 3:20 PM, Matt Harrison <iwasinnamuknow-ja4MoDZtUtVl57MIdRCFDg@public.gmane.org> wrote:> I''ve got a relationship: > > Person has many MiddleNames > and > MiddleName belongs to Person > > > In irb I can add a person, add a middle name then call > > @person.middle_names.first.nameAnd what happens if you don''t add a middle name. [].first #=> nil> > to get that middle name. However when I try the exact same code in a view, I > get > > undefined method `name'' for nil:NilClass > > If I iterate through like so: > > for mname in @person.middle_names > puts mname.nameBecause if @person.middle_names is empty the loop body is not executed.> > Then it works perfectly, but for some reason using ".first" is failing in > the view. I''ve used this method many many times and never come across > anything quite like this. > > I believe I''m probably overlooking some incredibly simple answer and I''m > going to kick myself when someone points it out, but for now I''m completely > stumpted. > > Any input appreciated. > > Thanks > > Matt >-- Rick DeNatale Blog: http://talklikeaduck.denhaven2.com/ Twitter: http://twitter.com/RickDeNatale WWR: http://www.workingwithrails.com/person/9021-rick-denatale LinkedIn: http://www.linkedin.com/in/rickdenatale -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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 Sat, Dec 26, 2009 at 09:43:26PM -0500, Rick DeNatale wrote:> On Sat, Dec 26, 2009 at 3:20 PM, Matt Harrison > <iwasinnamuknow-ja4MoDZtUtVl57MIdRCFDg@public.gmane.org> wrote: > > I''ve got a relationship: > > > > Person has many MiddleNames > > and > > MiddleName belongs to Person > > > > > > In irb I can add a person, add a middle name then call > > > > @person.middle_names.first.name > > And what happens if you don''t add a middle name. > > [].first #=> nilThat is true, but in my scenario I have added a middle name and related it to that person. I will of course go and triple check that but I have executed the copy and pasted commands from the cuke steps and it worked in irb. Its quite possible I have slipped up but I will go and check. Thanks> > > > > to get that middle name. However when I try the exact same code in a view, I > > get > > > > undefined method `name'' for nil:NilClass > > > > If I iterate through like so: > > > > for mname in @person.middle_names > > ?puts mname.name > > > Because if @person.middle_names is empty the loop body is not executed.But it does execute the loop, and prints out the first of the names as expected. This is the weird thing.> > > > Then it works perfectly, but for some reason using ".first" is failing in > > the view. I''ve used this method many many times and never come across > > anything quite like this.-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
maybe ''puts @person.middle_names.inspect'' will give some information of the structure . On 2009年12月27日 05:54, Matt Harrison wrote:> On Sat, Dec 26, 2009 at 09:43:26PM -0500, Rick DeNatale wrote: > >> On Sat, Dec 26, 2009 at 3:20 PM, Matt Harrison >> <iwasinnamuknow-ja4MoDZtUtVl57MIdRCFDg@public.gmane.org> wrote: >> >>> I''ve got a relationship: >>> >>> Person has many MiddleNames >>> and >>> MiddleName belongs to Person >>> >>> >>> In irb I can add a person, add a middle name then call >>> >>> @person.middle_names.first.name >>> >> And what happens if you don''t add a middle name. >> >> [].first #=> nil >> > That is true, but in my scenario I have added a middle name and related it to that > person. I will of course go and triple check that but I have executed the copy and > pasted commands from the cuke steps and it worked in irb. > > Its quite possible I have slipped up but I will go and check. Thanks > > >> >>> to get that middle name. However when I try the exact same code in a view, I >>> get >>> >>> undefined method `name'' for nil:NilClass >>> >>> If I iterate through like so: >>> >>> for mname in @person.middle_names >>> ?puts mname.name >>> >> >> Because if @person.middle_names is empty the loop body is not executed. >> > But it does execute the loop, and prints out the first of the names as expected. This > is the weird thing. > > >>> Then it works perfectly, but for some reason using ".first" is failing in >>> the view. I''ve used this method many many times and never come across >>> anything quite like this. >>> > -- > > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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. > > > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.