ruby-on-rails: update_attributes Überschreibungen Modellvalidierungen?
-
21-09-2019 - |
Frage
Ich habe ein typisches, Post Modell:
class Post< ActiveRecord::Base
validates_presence_of :user_id #Line 1
validates_presence_of :title,:body #Line 2
in der Steuerung, die ich habe:
def create
if request.post?
if login_required
@post = Post.new(params[:post]) #Line 3
@post .update_attribute("user_id",session[:userid]) #Line 4
Wenn jedoch die Validierungen auf der Linie 2 die Post scheitern wird noch erstellt werden, es sei denn, Zeile 4 wird als Kommentar gekennzeichnet.
1) Warum?
2) Vorschläge an einer Lösung?
Danke
Lösung
Aus dem Eintrag auf update_attribute
in doc für Active: : Persistenz :
Aktualisiert ein einziges Attribut und spart die Aufzeichnung ohne die geht durch normale Validierungsverfahren. Das ist besonders nützlich für boolean Flaggen auf vorhandene Datensätze.
Scheint, wie es eine Lücke ist zu helfen, den Aufwand für die Validierung zu vermeiden, wenn Sie einen Quickie zwicken machen auf einen Rekordwert. Wenn Sie die Validierung möchten, verwenden Sie einfach
@post.update_attributes(:user_id => session[:userid])