authlogic and NameError "undefined local variable or method `login'"

Hi!
I am using authlogic and I have a User model (with act_as_authentic)
without the "login" field, since I use "email" as the user name. As it
says in the authlogic documentatation, that should be the way it works
when there is no login field.

When I create new users manually via the User -> new form, everythings
works fine.

But:

Now I'd like to add user accounts as a side effect when anonymous
users fill in a form (actually it's the "new" form for an entity
called SearchSubscription).

Now, in my SearchSubscription class, I have this "before_create
:assign_user" callback:

def assign_user
if self.user_id.nil?
# find user with the given email address. If not present, create new user.
user = User.find(:first, :conditions => {:email => self.email})
if !user.nil?
self.user_id = user.id
else
# User not found, so create one
randompassword =
Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]
user = User.create(:email => self.email, :password =>
randompassword, :location => self.location)
if user.id
self.user_id = user.id
else
flash[:warning] = "Could not create user account"
end
end
end
end

This works well for email addresses that have a user entry. But
whenever I try to create a new SearchSubscription with an unknown
email address, I get the following error:

NameError (undefined local variable or method `login' for
#<SearchSubscription:0x104099750>):
  app/models/search_subscription.rb:26:in `assign_user'
  app/controllers/search_subscriptions_controller.rb:21:in `create'

I have the impression that somewhere, the "User" class requires the
login. But I don't want to maintain a login field, since I want to use
the email address for that.

Any ideas?

Thanks!

Marian

Hi!
I am using authlogic and I have a User model (with act_as_authentic)
without the "login" field, since I use "email" as the user name. As it
says in the authlogic documentatation, that should be the way it works
when there is no login field.

When I create new users manually via the User -> new form, everythings
works fine.

But:

Now I'd like to add user accounts as a side effect when anonymous
users fill in a form (actually it's the "new" form for an entity
called SearchSubscription).

Now, in my SearchSubscription class, I have this "before_create
:assign_user" callback:

def assign_user
if self.user_id.nil?
# find user with the given email address. If not present, create new user.
user = User.find(:first, :conditions => {:email => self.email})
if !user.nil?
self.user_id = user.id
else
# User not found, so create one
randompassword =
Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder?
I am not quite sure what the [0..7] is for either.

    user = User\.create\(:email =&gt; self\.email, :password =&gt;

randompassword, :location => self.location)
if user.id
self.user_id = user.id
else
flash[:warning] = "Could not create user account"
end
end
end
end

This works well for email addresses that have a user entry. But
whenever I try to create a new SearchSubscription with an unknown
email address, I get the following error:

NameError (undefined local variable or method `login' for
#<SearchSubscription:0x104099750>):

The clue is in the error message, it is SearchSubscription that it is
complaining about, not User.

Colin

Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder?
I am not quite sure what the [0..7] is for either.

Stupid me. I took that snippet some web page and didn't even notice
that it uses a variable I don't have. :frowning:

The [0..7] might be another way of doing a substring.

NameError (undefined local variable or method `login' for
#<SearchSubscription:0x104099750>):

The clue is in the error message, it is SearchSubscription that it is
complaining about, not User.

Colin, thank you very much! I replaced #{login} with #{self.email} and
now it works.

Marian

Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder?
I am not quite sure what the [0..7] is for either.

Stupid me. I took that snippet some web page and didn't even notice
that it uses a variable I don't have. :frowning:

The [0..7] might be another way of doing a substring. Is it not?

NameError (undefined local variable or method `login' for
#<SearchSubscription:0x104099750>):

The clue is in the error message, it is SearchSubscription that it is
complaining about, not User.

Colin, thank you very much! I replaced #{login} with #{self.email} and
now it works.

Marian

Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder?
I am not quite sure what the [0..7] is for either.

Stupid me. I took that snippet some web page and didn't even notice
that it uses a variable I don't have. :frowning:

The [0..7] might be another way of doing a substring.

NameError (undefined local variable or method `login' for
#<SearchSubscription:0x104099750>):

The clue is in the error message, it is SearchSubscription that it is
complaining about, not User.

Colin, thank you very much! I replaced #{login} with #{self.email} and
now it works.

Marian

Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder?
I am not quite sure what the [0..7] is for either.

Stupid me. I took that snippet some web page and didn't even notice
that it uses a variable I don't have. :frowning:

The [0..7] might be another way of doing a substring.

Yes, I realised that just after I posted. It is not a syntax that I
use regularly.

Colin