Problem z stack level too deep

kiedy korzystam z gotwej akcji dodanie nowego usera do bazy wygenrowanej poprzez scaffold dostaje taki błąd

[code]
SystemStackError in UzytkownicyController#create

stack level too deep

RAILS_ROOT: script/…/config/…
Application Trace | Framework Trace | Full Trace

app/models/user.rb:10:in digest' app/models/user.rb:10:inhexdigest’
app/models/user.rb:10:in password=' app/models/user.rb:10:inpassword=’
app/controllers/uzytkownicy_controller.rb:25:in new' app/controllers/uzytkownicy_controller.rb:25:increate’[/code]
oto mój model

[code]class User < ActiveRecord::Base
set_primary_key ‘user_id’
validates_presence_of :username
validates_uniqueness_of :username

attr_accessor :password_confirmation 
attr_reader :password 

def password=(pw)
    self.password = Digest::MD5.hexdigest(pw)
end

def password_is?(pw)
    Digest::MD5.hexdigest(pw) == password
end

end[/code]
co jest wynikiem tego błędu?

Jest to spowodowane nieskończoną rekurencją. Oto kawałek kodu, który jest za to odpowiedzialny:

def password=(pw) self.password = Digest::MD5.hexdigest(pw) end

dzięki pomogło

a mam jeszcze jedno pytanie, jak zrobić aby przy dodwania nowego usera hasło wpisane było zamieniane na hash MD5 i w takiej postaci było dodwane do bazy

mam tak ale dodaje mi hasło w postaci zwykłego tekstu

[code]
def password_new=(pw)
self.password = Digest::MD5.hexdigest(pw)
end

def password_is?(pw)
    Digest::MD5.hexdigest(pw) == password
end[/code]

W modelu User, prócz standardowych login, e-mail, potrzebujesz także pola hash (na hash hasła). Następnie do tego modelu dodajesz wirtualny atrybut o nazwie password.

[code]class User
attr_accessor :password_confirmation
validates_confirmation_of :password

def password=(pwd)
@password = pwd
self.hash = Digest::MD5.hexdigest(pwd)
end

def password
@password
end

def validate
errors.add_to_base(‘Missing password’) if hash.blank?
end
end[/code]
Potem w formularzu logowania używasz wirtualnego atrybutu:

[code]<% form_tag do %>

Name: <%= text_field_tag :login, params[:login] %>

Password: <%= password_field_tag :password, params[:password] %>

<%= submit_tag 'Login', :class => 'submit' %>

<% end %>[/code]

właśnie tego nie rozumiem dlaczego wszyscy robie dodatkowe pole hash na hash hasła, ja chce przetrzymywać w bazie w polu password hash hasła nie w dodatkowym

przy pomocy radareka problem został rozwiąznay

[code]require ‘digest/md5’
class User < ActiveRecord::Base
set_primary_key ‘user_id’

def password=(pw)
    write_attribute(:password, Digest::MD5.hexdigest(pw))
end

def password_is?(pw)
    Digest::MD5.hexdigest(pw) == password
end

end[/code]