Aktualizacja wartości w jednej kolumnie w tabeli

Może to jest trywialne pytanie. Ale jak mogę zaktualizować jedno pole w bazie ?
Po zalogowaniu się, pobieram uzytkownika:

user = User.find(:first, :conditions=>["login = ?", login])

Następnie próbuję:

user.update_attributes(:sessionid => session[:session_id])

Jednak pole w bazie “sessionid” nie jest zaktualizowane :confused:

user.save

[quote=Kofel]user.save
[/quote]
update_attributes zapisuje rekord, więc save nic tu raczej nie pomoże.

Sajrox:

Najprawdopodobniej sessionid nie może być zapisane używając “mass assignment” (jeżeli nie kojarzysz co to takiego, to poszukaj na googlach tego zwrotu i dodatkowo zobacz metody attr_accessible i attr_protected w railsach).

Możesz spróbować update_attribute, tylko pamiętaj, że ta metoda opuszcza wszelkie callbacki i walidacje:

user.update_attribute(:sessionid, params[:session_id])

Druga opcja to:

user.sessionid = params[:session_id]) user.save
W nowych railsach jest jeszcze jakiś argument, który pozwala ominąć sprawdzanie attr_accessible/attr_protected, ale nie pamiętam teraz, która wersja i co to było (możesz pogooglować).

Walidacje tak, ale czy callbacki też? (mi się wydaje, że callbacki jak najbardziej są odpalane przy save(false), z którego korzysta ta metoda).

Tak, masz rację, coś mi się pomieszało.

[quote]Updates a single attribute and saves the record. This is especially useful for boolean flags on existing records. Also note that

Validation is skipped.

Callbacks are invoked.

updated_at/updated_on column is updated if that column is available.

Updates all the attributes that are dirty in this objec[/quote]

moze ustawic attr_accessor na te pole?

A co to da? Zdefiniuje tylko na nowo metody sessionid i sessionid=.

bo wyglada na to ze teraz jest protected

pomylka: raczej attr_accessible a nie attr_accessor :wink:

Już wiem jaki był problem, a raczej dalej jest tylko nie wiem jak go obejść. Chodzi o to że w modelu User mam 2 walidatory:

validates_presence_of :password, :message => "Haslo jest wymagane" validates_presence_of :password_confirmation, :message => "Musisz powtorzyc haslo"
Problem w tym że tych pól nie ba w tabeli, gdyż są potrzebne tylko do rejestracji i logowania.
Pytanie jak pominąć te walidatory przy aktualizacji tylko pola sessionid ? Siłą rzeczy aktualizuje tylko jedno pole a pole password i password_confirmation są puste.

validate … on => create

i w ogóle polecam pomoc
np: http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_presence_of