Forum: Rails Germany Problem mit update_attributes

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A83f98241068bdcdd27b33713c475366?d=identicon&s=25 Frechdax75 (Guest)
on 2008-11-16 23:00
(Received via mailing list)
Hi,

ich stelle gerade meine kleine Anwendung auf Rails 2.1.0 um (vorher
Rails 1.2.3). Jetzt stolper ich über eine alltägliche Situation -
update_attributes.

Mein Modell "User" hat u.a. ein Feld "Bemerkung", welches ich erst im
Controller mit:

     params[:user][:bemerkung] = @user.bemerkung << "bearbeitet am " <<
Time.now << params[:chat]

bearbeite.

Edit-View:
<% form_for(@user) do |u| %>
...
  </tr><tr>
    <th rowspan=2>Bemerkung</th>
    <td colspan=3><%= simple_format(@user.bemerkung) %></td>
  </tr></tr>
    <td colspan=3><%= text_area_tag 'chat', nil, :size => "75x10"
%></td>
  </tr>
...
     <%= u.submit "Speichern" %>
<% end %>

Controller-Update
   def update
     @user = User.find(params[:id])
     params[:user][:bemerkung] = @user.bemerkung << "bearbeitet am " <<
Time.now << params[:chat]
     if @user.update_attributes(params[:user])
       flash[:notice] = 'User erfolgreich gespeichert.'
...
     end
   end

Bisher lief das alles prima, mit update_attributes wurde auch das Feld
"Bemerkung" geupdatet.

Seit der Umstellung geht dies nicht mehr, er speichert alle veränderten
Felder, nur die Bermerkung nicht mehr :/
Ich habe inzwischen auch mal ein hidden_field ausprobiert, da speichert
ers zwar in die DB (MySql), jedoch müllt er mir damit die Bemerkung bei
jeder fehlerhaften Validierung zu.
Bemerkung hat aber keine Validierung *anmerk*

Das Internet hab ich jetzt durchwühlt ohne Ergebnis. Wo liegt mein
Denkfehler?

Grüsse

Dani
6805b35d0a8ea3ede0a7da2d4cf5ae77?d=identicon&s=25 Jonathan Weiss (Guest)
on 2008-11-17 09:50
(Received via mailing list)
> Das Internet hab ich jetzt durchwühlt ohne Ergebnis. Wo liegt mein
> Denkfehler?

update_attributes gehört meiner meinung nach Verboten, da es nur zu
schlechtem Code führt. Ich glaube dein Problem ist, dass `params`
nicht mehr schreibbar ist, sondern ein reiner getter geworden ist.

Probier mal

@user.attributes = params[:user]
@user.bemerkung = @user.bemerkung << "bearbeitet am " << Time.now <<
params[:chat]

if @user.save
  ...
end


Wobei die `@user.bemerkung`-Zeile auch eher in das Model gehört, z.B.
in einen Callback.

Jonathan
A83f98241068bdcdd27b33713c475366?d=identicon&s=25 Frechdax75 (Guest)
on 2008-11-17 21:55
(Received via mailing list)
Jonathan Weiss schrieb:
>> Das Internet hab ich jetzt durchwühlt ohne Ergebnis. Wo liegt mein
> params[:chat]
>
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> rubyonrails-ug mailing list
> rubyonrails-ug@headflash.com
> http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Zunächst vielen Dank erstmal.
Habe das ganze mal mit @user.save probiert und leider komme ich zum
gleichen Ergebnis.

Jetzt habe ich das Ganze mal auseinander genommen:
1.
params[:user][:bemerkung] = "bearbeitet am " << Time.now <<
params[:chat]
2.
params[:user][:bemerkung] = @user.bemerkung << "bearbeitet am " <<
Time.now << params[:chat]
3.
params[:user][:bemerkung] = @user.bemerkung

Punkt 1 führt er korrekt aus, mit Eintrag in DB
Punkt 2 ist ohne Eintrag in DB
Punkt 3 ist zwar hirnrissig (aber gut zum Testen), ebenfalls ohne
Eintrag in DB, hier liegt also mein Problem

Lasse ich mir vorher @user.bemerkung mittels puts ausgeben, ist der alte
Wert von Bemerkung korrekt drin.

Jetzt verstehe ich gar nichts mehr:/ Wieso überträgt er den alten Wert
nicht, aber alles andere?
Und warum ist save besser als update_attributes?

Grüsse

Dani
This topic is locked and can not be replied to.