2013-07-31 19 views
8

Tôi đang trải qua một vài Rails 3 và 4 hướng dẫn và đi qua một cái gì đó tôi rất thích một số hiểu biết về:Rails điều khiển tạo ra sự khác biệt giữa hành động và Model.new Model.create

sự khác biệt giữa mô hình là gì .new và Model.create liên quan đến hành động Tạo. Tôi nghĩ bạn sử dụng phương pháp create trong bộ điều khiển để tiết kiệm ví dụ. @post = Post.create(params[:post]) nhưng có vẻ như tôi bị nhầm lẫn. Bất kỳ cái nhìn sâu sắc nào được đánh giá cao.

Tạo hành động sử dụng 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 

Tạo hành động sử dụng 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 

Tôi có hai câu hỏi

  • này để làm với một Rails 4 thay đổi là?
  • Thực tiễn không tốt là sử dụng @post = Post.create(post_params)?
+0

thể trùng lặp của [Rails mới vs tạo] (http://stackoverflow.com/questions/2472393/rails-new-vs-create) – Amadan

+1

Cảm ơn bạn đã tham khảo Amadan. Rails REST có thực thi 'GET' và' POST' giống như các hành động điều khiển 'new' và' create' không? Tôi đang cố gắng để làm rõ hành động REST vs điều khiển vs phương pháp điều khiển. –

+0

Xin lỗi, tôi nên làm rõ; câu trả lời của Justin Ethier đặc biệt đề cập đến các phương thức ActiveRecord. – Amadan

Trả lời

0

Phương thức Model.new tạo một mẫu kiểu nil và phương pháp Model.create cũng cố gắng lưu trực tiếp vào cơ sở dữ liệu.

Model.create phương pháp tạo một đối tượng (hoặc nhiều đối tượng) và lưu nó vào cơ sở dữ liệu, nếu xác thực vượt qua. Đối tượng kết quả được trả về cho dù đối tượng đã được lưu thành công vào cơ sở dữ liệu hay không.

object = Model.create không cần phương thức object.save để lưu các giá trị trong cơ sở dữ liệu.


Trong Model.new phương pháp, các đối tượng mới có thể được khởi tạo là một trong hai rỗng (vượt qua không có tham số xây dựng)

Trong Model.new(params[:params]) cài đặt trước với các thuộc tính nhưng chưa được lưu trong DB (vượt qua một băm với những cái tên chủ chốt phù hợp tên cột bảng được liên kết).

Sau object = Model.new, chúng ta cần phải lưu các đối tượng bằng cách object.save

22

Model.new

Các thuyết minh sau và khởi tạo một mô hình bài trao params:

@post = Post.new(post_params) 

Bạn phải chạy save để duy trì thể hiện của bạn trong cơ sở dữ liệu:

@post.save 

Model.create

Các thuyết minh dưới đây, khởi và lưu trong cơ sở dữ liệu một mô hình bài trao params:

@post = Post.create(post_params) 

Bạn không cần phải chạy lệnh save , nó được xây dựng sẵn rồi.

Mọi thông tin trên newhere

Mọi thông tin trên createhere

+2

@Wasabi Developer đã làm câu trả lời đã giải quyết được vấn đề của bạn chưa? –

+0

tuyệt vời. cảm ơn – jasper

Các vấn đề liên quan