2013-07-31 6 views
8

Idę przez kilka szyn 3 i 4 tutorialu i natknąć się coś, chciałbym kilka spostrzeżeń na temat:Rails kontroler tworzyć różnicy działania między Model.new i Model.create

Jaka jest różnica między modelem .new i Model.create w odniesieniu do akcji Utwórz. Myślałem, że używasz metody create w sterowniku do zapisywania np. @post = Post.create(params[:post]) ale wygląda na to, że się mylę. Każdy wgląd jest bardzo doceniany.

Tworzenie czynności za pomocą Post.new

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 

Tworzenie czynności za pomocą Post.create

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 

Mam dwa pytania

  • Jest to zrobić z Rails 4 zmiany?
  • Czy to jest zła praktyka używać @post = Post.create(post_params)?
+0

możliwe duplikat [Szyny nowy vs tworzyć] (http://stackoverflow.com/questions/2472393/rails-new-vs-create) – Amadan

+1

Dzięki za referencje Amadan. Czy Rails REST implementuje 'GET' i' POST' tak samo jak akcje kontrolera 'new' i' create'? Próbuję wyjaśnić REST vs działania kontrolera w stosunku do metod kontrolera. –

+0

Przepraszam, powinienem był wyjaśnić; odpowiedź Justina Ethiera odnosi się konkretnie do metod ActiveRecord. – Amadan

Odpowiedz

0

Sposób Model.new tworzy nil instancji modelu i metody Model.create dodatkowo próbuje zapisać go do bazy danych bezpośrednio.

Model.create metoda tworzy obiekt (lub wiele obiektów) i zapisuje go do bazy danych, jeśli sprawdzanie się powiedzie. Wynikowy obiekt jest zwracany niezależnie od tego, czy obiekt został pomyślnie zapisany w bazie danych, czy nie.

object = Model.create nie wymaga żadnej metody zapisywania wartości w bazie danych za pomocą metody object.save.


W Model.new metody, nowe obiekty mogą być instancja albo jako pusty (przesuń żadnego parametru budowie)

W Model.new(params[:params]) pre-set z atrybutami, ale jeszcze nie zapisany w DB (przesuń mieszania z kluczem nazwy dopasowania skojarzone nazwy kolumn tabeli).

Po object = Model.new, musimy zapisać obiekt przez object.save

22

Model.new

Poniższa instancji i zainicjować modelem Post podane params:

@post = Post.new(post_params) 

Musisz uruchom save, aby utrwalić instancję w bazie danych:

@post.save 

Model.create

Poniższa instancji, zainicjować i zapisać w bazie modelu post biorąc pod uwagę params:

@post = Post.create(post_params) 

Nie trzeba uruchomić komendę save , jest już wbudowany.

Więcej informacji na newhere

Więcej informacji na createhere

+2

@Sasabi Developer czy odpowiedź rozwiązała twój problem? –

+0

niesamowite. dzięki – jasper