Schienen: update_attributes nicht alle Attribute aktualisieren
Habe ich ein einfaches Modell, genannt der Diskussion, die eine boolean-Spalte namens gelöst.
In meinem Formular habe ich folgenden code
<%= form_for(@discussion) do |d| %>
...
<%= d.check_box :resolved %>
<% end %>
Und in meinem controller habe ich folgende:
def update
@discussion = Discussion.find(params[:id])
if @discussion.update_attributes(params[:discussion])
etc...
end
end
Wenn ich das Formular abschicken kann ich sehen, dass die Parameter werden an den server gesendet werden...
Parameters: {"utf8"=>"✓", "authenticity_token"=>"AsGsRHwiVva/+kTrBs0IjLeZwj1ZmXBuKZr9Pg/N6Xk=", "discussion"=>{"shortdesc"=>"Talk about something.", "content"=>"Try to update check box.", "resolved"=>"1"}, "commit"=>"Update Discussion", "id"=>"1"}
Aber die Abfrage nicht enthalten, was über das Update, das Feld.
AREL (14.9ms) UPDATE "discussions" SET "content" = 'Try to update check box.', "updated_at" = '2011-07-18 17:53:50.783176' WHERE "discussions"."id" = 1
Jede Idee, was mir fehlt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es 4 Gründe, warum dies geschehen könnte:
resolved
ist bereits auf true gesetzt in der Datenbank.resolved=
Methode in Ihrem Modell, und es nicht mehr setzt das Attribut.attr_protected :resolved
.attr_accessible
aber nicht:resolved
in der Liste.Discussion
Modell hat Validierungen oder Rückrufe ausgeführt, die stören die update.macht Ihr Boolesche Spalte mit default? Wenn Sie den Standardwert "true" - Schienen vielleicht nicht stören, indem es die Menge der Attribute.
Alternativ haben Sie attr_protected setzen für diese Spalte? wenn ja - Schienen werden niemals fügen Sie das Feld, um die Attribute mit update_attributes. Sie müssen dies manuell tun.
Alle,
Hatte ich vor kurzem damit begonnen, Schienen und war die übernahme fremder code gefunden und ein weiteres Szenario, das nicht gedeckt war hier, das war immer ich.
Bei der Verwendung der Stil wies auf durch diese Verbindung, die die params gebildet sind, in eine separate Methode. Ich hatte zu aktualisieren, die "_params" - Methode, um fügen Sie Sie der zulässigen Liste.
http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html
Sind Sie sicher, dass das element ist, sended es?
Ich meine, form-element ohne überprüft das element nicht gesendet, so dass Sie haben, um eine versteckte checkbox für default false.
resolved
Wert in der Parameter-hash.