Câu trả lời:
Trong quá trình triển khai REST và tạo REST mới của Rails được xử lý khác nhau.
HTTP GET to /resources/new
được dự định để hiển thị một biểu mẫu phù hợp để tạo tài nguyên mới, bằng cách gọi tài nguyên mới hành động trong bộ điều khiển, tạo ra một bản ghi chưa được lưu mới và hiển thị biểu mẫu.
HTTP POST để /resources
lấy bản ghi được tạo như một phần của hành động mới và chuyển nó sang hành động tạo trong bộ điều khiển, sau đó cố gắng lưu nó vào cơ sở dữ liệu.
Từ tài liệu ActiveRecord :: Base :
tạo (thuộc tính = nil) {| object | ...}
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 nhận 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 chưa.
mới (thuộc tính = nil) {| tự nếu block_given? | ...}
Các đối tượng mới có thể được khởi tạo dưới dạng trống (không có tham số xây dựng) hoặc được đặt trước với các thuộc tính nhưng chưa được lưu (chuyển một hàm băm với tên khóa khớp với tên cột của bảng liên quan). Trong cả hai trường hợp, các khóa thuộc tính hợp lệ được xác định bởi tên cột của bảng được liên kết - do đó bạn không thể có các thuộc tính không phải là một phần của các cột trong bảng.
Vì vậy, create
khởi tạo đối tượng mới, xác nhận nó và sau đó lưu nó vào cơ sở dữ liệu. Và new
chỉ tạo đối tượng cục bộ nhưng không cố xác thực hoặc lưu nó vào DB.
Mới khởi tạo một thể hiện Model mới, nhưng nó không được lưu cho đến khi phương thức lưu được gọi.
Tạo làm tương tự như mới, nhưng cũng lưu nó vào cơ sở dữ liệu.
Đôi khi bạn muốn làm công cụ trước khi lưu một cái gì đó vào cơ sở dữ liệu, đôi khi bạn chỉ muốn tạo và lưu nó ngay lập tức.
Các phần RESTful của Rails được tạo ra rất gần với cách thức hoạt động của giao thức HTTP. Trong giao thức HTTP, yêu cầu GET không cần phải sửa đổi bất kỳ dữ liệu nào. Về mặt logic, nếu bạn nhìn vào cách tất cả các hành động RESTful trong Rails hoạt động, chúng sẽ khớp với các hành động HTTP. POST là để tạo dữ liệu mới, vì vậy nó được tạo một cách hợp lý. Bạn sử dụng một GET để phục vụ phiên bản biểu mẫu của điều đó hoặc nói cách khác, hành động mới. Chỉ mục và hiển thị cũng là NHẬN, cập nhật là PUT (hoặc PATCH trong Rails 4+) và hủy là một XÓA trong HTTP.
Ngoài ra, nó tách biệt logic trong bộ điều khiển và cung cấp cho bạn một cách trơn tru để xử lý lỗi (bằng cách hiển thị lại hành động mới với thông báo lỗi).
"You use a GET to serve the form version of that or in other words, the new action"
cảm ơn vì câu trả lời nhưng cá nhân tôi thấy quy ước đặt tên này thực sự khó hiểu