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)

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 at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to