Vì vậy, tôi đã thấy mọi người đang sử dụng .build, .create và .create! trong bộ điều khiển của họ ngày càng nhiều. Sự khác biệt từ việc sử dụng .new và passig đối tượng param'd và sau đó. Save? Có ưu và nhược điểm nào không? Việc sử dụng các phương pháp khác này có mang lại lợi ích không?Sự khác nhau giữa .build, .create và .create! và khi nào chúng nên được sử dụng?
Trả lời
Có một vài sự khác biệt, nhưng chúng không lớn:
.create
tương đương với.new
Tiếp theo.save
. Nó chỉ gọn gàng hơn..create!
tương đương với.new
theo sau là.save!
(ném lỗi nếu lưu không thành công). Đó cũng chỉ là một chút ngắn hơn một chút- Tôi nghĩ rằng
.build
là chủ yếu là bí danh cho.new
. Nó works one way in Rails 3 và một cách khác trong Rails < 3.x
Phần quan trọng nhất, tuy nhiên, đó là những phương pháp này có thể được gọi thông qua một hiệp hội (has_many
, vv) để tự động liên kết hai mô hình.
#create là phiên bản mới hơn và lưu lại. #create! là ném ngoại lệ nếu xác thực không dương.
Tôi muốn trả lời các câu hỏi trên. Ngoài ra, đối với create
, bạn không thể vượt qua false
làm đối số mà bạn có thể thực hiện với save
. Đi qua false
như một cuộc tranh cãi sẽ bỏ qua tất cả đường ray kiểm chứng thực
Mặc dù nó là đúng rằng create
gọi new
và sau đó save
có một sự khác biệt lớn giữa hai lựa chọn thay thế trong các giá trị trở lại của họ.
Save
trả lại true
hoặc false
tùy thuộc vào việc đối tượng có được lưu thành công vào cơ sở dữ liệu hay không. Điều này sau đó có thể được sử dụng để kiểm soát dòng chảy theo ví dụ đầu tiên trong câu hỏi trên.
Create
sẽ trả về mô hình bất kể đối tượng có được lưu hay không. Điều này có ý nghĩa đối với mã ở trên trong đó nhánh trên cùng của câu lệnh if
sẽ luôn được thực thi ngay cả khi đối tượng không xác nhận hợp lệ và không được lưu.
Nếu bạn sử dụng create
với logic phân nhánh bạn có nguy cơ bị lỗi thầm lặng, không phải trường hợp nếu bạn sử dụng new
+ save
.
create!
không bị cùng một vấn đề vì nó tăng và ngoại lệ nếu bản ghi không hợp lệ.
Phương án create
có thể hữu ích trong bộ điều khiển trong đó respond_with
được sử dụng cho phản hồi API (JSON/XML). Trong trường hợp này, sự tồn tại của các lỗi trên đối tượng sẽ làm cho các lỗi được trả về trong phản hồi với trạng thái là unprocessable_entity
, chính xác là những gì bạn muốn từ một API.
Tôi sẽ luôn sử dụng tùy chọn new
+ save
cho html, đặc biệt nếu bạn đang dựa vào giá trị trả lại cho kiểm soát luồng.
- 1. Sự khác nhau giữa việc sử dụng MD5.Create và MD5CryptoServiceProvider là gì?
- 2. sự khác biệt giữa http.context.user và thread.currentprincipal và khi nào nên sử dụng chúng?
- 3. Sự khác nhau giữa `after_create` và` after_save` là gì và khi nào nên sử dụng?
- 4. Django: Sự khác biệt giữa save() và create() từ góc độ giao dịch
- 5. phpMyAdmin và SHOW CREATE TABLE
- 6. C# create thead và tbody
- 7. Sự khác nhau giữa tự và điều này trong javascript và khi nào thì sử dụng một trong hai chúng
- 8. Python: sự khác nhau giữa (1,2,3) và [1,2,3] là gì và khi nào tôi nên sử dụng mỗi?
- 9. Sự khác nhau giữa string.ToLower và TextInfo.ToLower
- 10. Sự khác nhau giữa id và class trong CSS và khi sử dụng nó
- 11. Rails new vs create
- 12. DROP ... CREATE vs ALTER
- 13. Sự khác biệt giữa targetSdkVersion và Project build target
- 14. Khi nào chúng ta nên sử dụng lớp học và khi chúng ta không nên
- 15. Sự khác nhau giữa initWithNibName và initWithCoder
- 16. Sự khác nhau giữa NoClassDefFoundError và ClassNotFoundException?
- 17. Sự khác nhau giữa sys và os.sys
- 18. Sự khác nhau giữa [AcceptVerbs (HttpVerbs.Post)] và [HttpPost] là gì?
- 19. Sự khác nhau giữa Date.parse() và .getTime()
- 20. Sự khác nhau giữa Iterator và Listiterator?
- 21. Sự khác nhau giữa installshield và windowsinstaller
- 22. Sự khác nhau giữa ParameterInfo.DefaultValue và ParameterInfo.RawDefaultValue
- 23. Sự khác nhau giữa tasklet và workqueue
- 24. Khi nào chúng ta nên sử dụng mutex và khi nào chúng ta nên sử dụng semaphore
- 25. Sự khác nhau giữa C: và C:/
- 26. Sự khác nhau giữa 'SpecialFolder.LocalApplicationData' và 'SpecialFolder.ApplicationData'?
- 27. Sự khác nhau giữa Response.End() và Response.Flush()
- 28. Sự khác nhau giữa ViewFlipper và ViewSwitcher
- 29. Sự khác nhau giữa REST và WebServices
- 30. Sự khác nhau giữa FacesContext và ExternalContext
Tôi đã chọn câu trả lời này là câu trả lời đúng nhất vì đề cập đến việc có thể liên kết các mô hình được liên kết với họ - đó là sự khác biệt thú vị và quan trọng mà tôi nghĩ đến khi sử dụng .new và .save. Việc này tốn thêm một chút. Cảm ơn. –
Làm rõ nhỏ trên 3 - xây dựng không chỉ mới hơn một chút - nó còn thiết lập liên kết liên kết. –
Làm thế nào để bạn gọi thông qua một hiệp hội trong một mối quan hệ Có-Nhiều? –