rendered paste body## model
class User < ActiveRecord::Base
has_many :openids
has_many :ownings, :dependent => :destroy
has_many :items, :through => :ownings
def self.create_with_openid(identity_url)
new_user = User.create
new_user.openids << Openid.create({:uri => identity_url})
return new_user
end
end
## controller snip
def complete
...
when OpenID::Consumer::SUCCESS
flash[:alert] = "Verification of #{identity_url} succeeded."
openid = Openid.find_by_uri(identity_url)
if openid
flash[:alert] += " existing user"
authorized_user = openid.user
else
flash[:alert] += " new user"
authorized_user = User.create_with_openid(identity_url)
end
logger.info("a_u = #{authorized_user.inspect}")
self.current_user = authorized_user
## lib/login.rb
def current_user=(new_user)
logger.info("*** #{new_user.class.name} #{new_user.inspect}")
debugger
new_user.id
end
## ruby debugger
(rdb:22) p new_user
#<User id: 1, guid: nil, name: nil, username: nil, password: nil>
(rdb:22) p new_user.id
SystemStackError Exception: stack level too deep
(rdb:22) p new_user.name
nil
(rdb:22) p new_user.name = "dod"
"dod"
(rdb:22) p new_user
#<User id: 1, guid: nil, name: "dod", username: nil, password: nil>
(rdb:22) p new_user.id
SystemStackError Exception: stack level too deep
(rdb:22)
## logfile snippit
Processing WelcomeController#complete (for 192.168.0.2 at 2007-12-06 14:03:54) [GET]
Openid Load (0.007669) SELECT * FROM openids WHERE (openids."uri" = E'http://donpdonp.myopenid.com/') LIMIT 1
User Load (0.008888) SELECT * FROM users WHERE (users."id" = 1)
a_u = #<User id: 1, guid: nil, name: nil, username: nil, password: nil>
*** User #<User id: 1, guid: nil, name: nil, username: nil, password: nil>
SystemStackError (stack level too deep):
/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:56:in `generated_methods?'
/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:186:in `method_missing'
/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:194:in `method_missing'
/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:124:in `send'
/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:124:in `method_missing'
/lib/login.rb:9:in `current_user='
/app/controllers/welcome_controller.rb:61:in `complete'
...