Well,  I don't see anything wrong.  stmt 44 in Expense controller
creates new Expense instance passing it the content of the :expense
item in the params hash, which is displayed in detail in the crash
output.

The :expense item is itself a hash of all the values enter in the New
Expense form.  In particular,  the vendor string key has the value
string 65,  which is indeed the vendor I select from the drop-down.

I restarted Mongrel with the --debugger argument, and Mongrel
confirmed that the debugger is enabled.  I then put a debugger
statement immediately ahead of the offending statement, which thus
became line# 45.  However, when I refreshed the program in Firefox,
the crash output still claimed that it crashed on line 44 (the
debugger statement).  But the command widow where I started Mongrel
seemed to indicated that the app was stopped on line 45.

I issues "p params" in the command window and got the same display
(except less neatly) as the hash I got in the crash dump.

Give all that,  I still have no idea why the app crashed.  Do you have
any idea?

Best wishes,
Richard

On Jul 17, 4:33 pm, Colin Law <clan...@googlemail.com> wrote:
> On 17 July 2010 15:50, RichardOnRails
>
>
>
> <richarddummymailbox58...@uscomputergurus.com> wrote:
> > Hi All,
>
> > I got closer.  I tried:
>
> >    <% @vendors = Vendor.find( :all, :order=>"nickname ASC") -%>
> >    <%= f.collection_select(:vendor, @vendors, :id, :nickname) %>
>
> > I ran the app and created a new expense. I clicked the drop-down list,
> > selected a vendor, populated the remaining fields of the form and
> > saved the expense.  The app then crashed (that's the bad part),  *but*
> > the Request parameters were perfect,  specifically:
> >  "vendor"=>"64"
>
> > So I saw the selected vendor's name when I clicked Save/Submit/
> > whatever and the generated expense record contained the id of the
> > selected vendor, not the name of that vendor, as had been the case in
> > some earlier versions of my code.
>
> > Below are some details of this crash.
>
> > Thanks for any help you may offer in resolving this matter.
> > --
> > Richard
>
> >  ActiveRecord::AssociationTypeMismatch in ExpensesController#create
>
> > Vendor(#37038620) expected, got String(#21132310)
>
> It is always worth while trying to understand error messages, quite
> often they can give you a clue as the problem.  The error above says
> that a Vendor object was expected, but you have given it a string.
> From the trace below you can see that it is at line 44 of
> expenses_controller.rb.  Have a look at that line and see if you can
> work out why it is expecting a Vendor object, see what you have
> actually provided and see if you understand what is going on.
>
> Colin
>
>
>
> > RAILS_ROOT: K:/_Projects/Ruby/_Rails_Apps/_EIMS/RTS
> > Application Trace | Framework Trace | Full Trace
>
> > K:/_Utilities/ruby186-26_rc2/ruby/lib/ruby/gems/1.8/gems/
> > activerecord-2.3.5/lib/active_record/associations/association_proxy.rb:
> > 262:in `raise_on_type_mismatch'
> > K:/_Utilities/ruby186-26_rc2/ruby/lib/ruby/gems/1.8/gems/
> > activerecord-2.3.5/lib/active_record/associations/
> > belongs_to_association.rb:22:in `replace'
> > K:/_Utilities/ruby186-26_rc2/ruby/lib/ruby/gems/1.8/gems/
> > activerecord-2.3.5/lib/active_record/associations.rb:1281:in `vendor='
> > K:/_Utilities/ruby186-26_rc2/ruby/lib/ruby/gems/1.8/gems/
> > activerecord-2.3.5/lib/active_record/base.rb:2746:in `send'
> > K:/_Utilities/ruby186-26_rc2/ruby/lib/ruby/gems/1.8/gems/
> > activerecord-2.3.5/lib/active_record/base.rb:2746:in `attributes='
> > K:/_Utilities/ruby186-26_rc2/ruby/lib/ruby/gems/1.8/gems/
> > activerecord-2.3.5/lib/active_record/base.rb:2742:in `each'
> > K:/_Utilities/ruby186-26_rc2/ruby/lib/ruby/gems/1.8/gems/
> > activerecord-2.3.5/lib/active_record/base.rb:2742:in `attributes='
> > K:/_Utilities/ruby186-26_rc2/ruby/lib/ruby/gems/1.8/gems/
> > activerecord-2.3.5/lib/active_record/base.rb:2438:in `initialize'
> > K:/_Projects/Ruby/_Rails_Apps/_EIMS/RTS/app/controllers/
> > expenses_controller.rb:44:in `new'
> > K:/_Projects/Ruby/_Rails_Apps/_EIMS/RTS/app/controllers/
> > expenses_controller.rb:44:in `create'
>
> > On Jul 17, 9:24 am, RichardOnRails
> > <richarddummymailbox58...@uscomputergurus.com> wrote:
> >> Hi Fred,
>
> >> Thanks for taking the trouble to respond again, especially since I
> >> failed to follow your previous response.  The problem then was that I
> >> was unsuccessful in applying it or didn't understand it ... probable
> >> both.  I definitely failed to realize that the argument (object) was
> >> to be omitted in the context of form elements.  That "little detail"
> >> seems missing in ActionView::Helpers::FormOptionsHelper.  Someone
> >> explicitly mentioned that in a subsequent post on this thread.
>
> >> Sadly,  when I followed your suggestion "to the letter", I was
> >> unsuccessful again.  I've got:
> >> ====== Error Msg =========
> >>  NameError in Expenses#new
>
> >> Showing app/views/expenses/new.html.erb where line #13 raised:
>
> >> undefined local variable or method `vendor_id' for #<ActionView::Base:
> >> 0x4822310>
>
> >> Extracted source (around line #13):
>
> >> 10:
> >> 11:     <%# New version of vendor selection -%>
> >> 12:     <% @vendors = Vendor.find( :all, :order=>"nickname ASC") -%>
> >> 13:     <%= f.collection_select(vendor_id, @vendors, :id, :nickname)
> >> %>
> >> 14:     <%# End of New version -%>
> >> [snip]
> >> ====== Error Msg =========
>
> >> So I tested whether vendor_id would be defined if I created an Expense
> >> instance in Rails console: Here's what I got (edited for brevity):
> >> K:\_Projects\Ruby\_Rails_Apps\_EIMS\RTS>ruby script/console
> >> Loading development environment (Rails 2.3.5)>> expense = Expense.new
>
> >> => #<Expense id: nil, vendor: nil, description: nil, category: nil,
> >> [snip]
>
> >> >> expense.vendor_id [NoMethodError]
> >> >> Expense.vendor_id [NoMethodError]
> >> >> params[:vendor_id] [NameError]
>
> >> I also tried using the symbol :vendor_id as the first arg.   That
> >> failed, too.
>
> >> I apologize for being so obtuse.  But I'd really like to get this app
> >> working,  and getting this expense-vendor hookup working may be my
> >> last obstacle (for a while, anyway).
>
> >> If you can give me a little more help about this problem, I'd be most
> >> appreciative.  If you need more info,  I'd be happy to post portions
> >> or all my code to a website from which you could download it for
> >> inspection.
>
> >> Best wishes,
> >> Richard
>
> >> On Jul 17, 5:29 am, Frederick Cheung <frederick.che...@gmail.com>
> >> wrote:
>
> >> > On Jul 16, 10:40 pm, RichardOnRails
>
> >> > <richarddummymailbox58...@uscomputergurus.com> wrote:
> >> > > Hey Colin,
>
> >> > > Here's one more detail I should have added from my new-expense-view
> >> > > code:
>
> >> > >     <%= f.label :vendor %><br />
>
> >> > >     <%# New version of vendor selection -%>
> >> > >     <% params[:expense] = 10 -%>
> >> > >     <% @vendors = Vendor.find( :all, :order=>"nickname ASC") -%>
> >> > >     <%= f.collection_select(:id, @vendors, :id, :nickname) %>
>
> >> > because the first argument should be the name of the attribute you are
> >> > trying to set (ie vendor_id). This and f.collection_select not needing
> >> > the first argument was on the link I gave on one of your other posts
> >> > (http://guides.rubyonrails.org/form_helpers.html)
>
> >> > Fred
>
> >> > >     <%# End of New version -%>
>
> >> > > I apologize for the fragmented response.  I was in a hurry to go out
> >> > > for my 3-mile walk :-)
>
> >> > > Best again,
> >> > > Richard
>
> > --
> > 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-t...@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > rubyonrails-talk+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://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-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to