2013-07-31 10 views
8

ich durch ein paar Rails 3 und 4 Tutorial und kommen über etwas los und ich habe einige Einblicke Liebe auf:Rails-Controller erstellen Aktion Unterschied zwischen Model.new und Model.create

Was ist der Unterschied zwischen dem Modell ist .new und Model.create in Bezug auf die Aktion Erstellen. Ich dachte, du verwendest die create Methode in der Steuerung zum Speichern zB. @post = Post.create(params[:post]) aber es sieht aus wie ich mich irre. Jede Einsicht wird sehr geschätzt.

Aktion erstellen Post.new mit

def new 
    @post = Post.new 
end 

def create 
    @post = Post.new(post_params) 
    @post.save 

    redirect_to post_path(@post) 
end 

def post_params 
    params.require(:post).permit(:title, :body) 
end 

Aktion erstellen Post.create mit

def new 
    @post = Post.new 
end 

def create 
    @post = Post.create(post_params) 
    @post.save 

    redirect_to post_path(@post) 
end 

def post_params 
    params.require(:post).permit(:title, :body) 
end 

Ich habe zwei Fragen

  • Ist das mit einer Rails 4 Änderung zu tun?
  • Ist es eine schlechte Praxis, @post = Post.create(post_params) zu verwenden?
+0

möglich Duplikat [Rails neu vs erstellen] (http://stackoverflow.com/questions/2472393/rails-new-vs-create) – Amadan

+1

Danke für die Referenz Amadan. Ist Rails-Implementierung von 'GET' und 'POST' genauso wie die Controller-Aktionen 'new' und' create'? Ich versuche, REST vs Controller-Aktionen vs Controller-Methoden zu klären. –

+0

Entschuldigung, ich hätte klären sollen; Die Antwort von Justin Ethier bezieht sich speziell auf ActiveRecord-Methoden. – Amadan

Antwort

0

Die Model.new Methode erstellt eine Null Modellinstanz und die Model.create Verfahren zusätzlich versucht, sie in die Datenbank direkt zu speichern.

Model.create Methode erstellt ein Objekt (oder mehrere Objekte) und speichert es in der Datenbank, wenn Validierungen bestanden werden. Das resultierende Objekt wird zurückgegeben, unabhängig davon, ob das Objekt erfolgreich in der Datenbank gespeichert wurde oder nicht.

object = Model.create benötigt keine object.save Methode, um die Werte in der Datenbank zu speichern.


In Model.new Verfahren können neue Objekte als entweder leer instanziiert werden (keine Konstruktions Parameter übergeben)

In Model.new(params[:params]) mit Attributen voreingestellten, aber noch nicht in DB (mit einer Hash mit Schlüsselnamen gespeichert passenden die zugehörigen Tabellenspaltennamen).

Nach object = Model.new, müssen wir das Objekt von object.save

22

Model.new

Die folgende instantiate und initialisieren ein Post Modell gegeben, um die params zu speichern:

@post = Post.new(post_params) 

Sie müssen Führen Sie save aus, um Ihre Instanz in der Datenbank zu speichern:

@post.save 

Model.create

Die folgende instantiate, initialisieren und in der Datenbank ein Modell der params gegeben Beitrags speichern:

@post = Post.create(post_params) 

Sie brauchen nicht ausführen, um den save Befehl Es ist bereits eingebaut.

Weitere Informationen auf newhere

Weitere Informationen auf createhere

+2

@Wasabi Entwickler hat die Antwort Ihr Problem gelöst? –

+0

genial. Vielen Dank – jasper

Verwandte Themen