def self.authenticate(login, password)
return nil if login.blank? || password.blank?
user = User.find_by_login_and_active(login.downcase, true)
user && user.authenticated?(password) ? user : nil
end
def login=(value)
write_attribute :login, (value ? value.downcase : nil)
end[/code]
Pole login nie występuje na formularzu. Jest ono tworzone z surname i forename z formularza.
Co bym nie robił z write_attribute to zawsze dostaje nul.
write_attribute :login, self.surname + “–” nie działa
def login=(value)
write_attribute :login, value.downcase
end
to to samo co
self.login = self.login.downcase
Pozdrawiam[/quote]
No to niezupełnie to samo. Pierwszy fragment to definicja metody (i przy okazji nadpisanie domyślnej), a drugi to wywołanie.
Jak chcesz, żeby login był tworzony z nazwiska to nie potrzebujesz definiować metody login= a tym bardziej nie powinieneś dodawać pola login do attr_accessible, bo będzie można je bezpośrednio zmodyfikowąć. Usuń te dwie rzeczy i zrób mniej więcej tak jak to napisał Bragi
class User <ActiveRecord::Base
before_validation_on_create :set_default_login
def set_default_login
self.login = surname ? surname.downcase : nil
end
end
[quote=l0pez]Po Twojej poradzie nie wywala aplikacja żadnych błędów, ale i nic nie zapisuje do bazy.
Pole login natomiast nie występuje w Parametrach[/quote]
Nie występuje bo go tam nie chcesz mieć, bo nie wiesz czemu go nie ma czy może jeszcze co innego? Opisz swoje intencje dokładnie.
Brak zapisu może być spowodowany tym, że świerzo utworzony user nie jest valid. Pokaż formularz i klasę User, szczególnie jej walidacje.