Hi
Just curious if anyone can explain why using a dynamic find fails to
work with << operator
I have standard habtm relationship
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
Now when I assign a Role via << after saving the new User I get wierd
behaviour
but only when using the dynamic version of find
i.e
@user = User.new(p)
if @user.save
# FOLLOWING DOES NOT WORK
# @user.roles << Role.find_by_name( ''registered''
)
# But this this is Fine !
@user.roles << Role.find( :first, :conditions =>
[''name = ?'',
''registered''] )
When using the usal find( :first) style everythign is sweet,
associaiton is built and appears in DB.
However when using the find_by_name association_proxy.rb throws an
exception but the error I get is somewhat cryptic as it appears as if
the result of find_by_name is a ''Role'' as expected :
"Role expected, got Role"
Chances are I''m doing something obviously wrong, and not really a
problemn as I can use find :first ..... but still curious, why does
find_by_name blow up ?
Cheers all,
tom
The full trace is here
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/
associations/association_proxy.rb:148:in `raise_on_type_mismatch''
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/
associations/association_collection.rb:24:in `<<''
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/
associations/association_collection.rb:23:in `each''
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/
associations/association_collection.rb:23:in `<<''
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/
connection_adapters/abstract/database_statements.rb:59:in
`transaction''
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/
transactions.rb:95:in `transaction''
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/
transactions.rb:121:in `transaction''
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/
associations/association_collection.rb:22:in `<<''
#{RAILS_ROOT}/app/controllers/user_controller.rb:176:in `new''
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
> # FOLLOWING DOES NOT WORK > # @user.roles << Role.find_by_name( ''registered'' )if Role.find_by_name(''registered'') returns more than one record (which, by definition :first will avoid) you may have this problem... what-say-u? if the :name isn''t unique, and u got a couple names with ''registered'' for the value ... you should be getting TypeMismatch, as you''re trying to associate an array instead of a Role to a @user. makes any sense? -- 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-/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 -~----------~----~----~----~------~----~------~--~---
Hi shai, thanks for the response. Yep does make sense but in this case there is definitly only one such Role in the DB, and also strikes me as odd that the error message says ''Role expected, got Role" Of course the message may simply be constructed wrongly, but I would expect ''Role expected, got Array" If I get time I will try and unravel the dynamic version, as I would expect under the hood, the two calls should be equivalent. cheers tom --~--~---------~--~----~------------~-------~--~----~ 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 looks like this is common problem, probably a rails bug ... not sure if it''s been raised as such but anyway, I found a post with a good workaround see... http://www.ruby-forum.com/topic/101817 where you define the assocation directly require the other model file ... e.g. in user.rb add require File.dirname(__FILE__)+''/role.rb'' --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---