Yeni raylar vs oluşturma


195

Neden RESTful denetleyicisinde yeni bir yöntem tanımlamaya, bir oluşturma yöntemiyle izlemeye ihtiyaç var?

Google arama aradığım yanıtı vermedi. Farkı anlıyorum, ancak neden oldukları gibi kullanıldıklarını bilmeliyim.

Yanıtlar:


263

Rails REST uygulaması içinde yeni ve oluşturmak işlemleri farklı şekilde ele alınmaktadır.

Bir HTTP GET için /resources/newçağırarak öyle yeni bir kaynak oluşturmak için uygun bir form kazandırmak için tasarlanmıştır yeni , yeni kaydedilmemiş kayıt oluşturan ve formu oluşturan denetleyicideki eylemi .

Yeni eylemin bir /resourcesparçası olarak oluşturulan kaydı alıp denetleyicideki oluşturma eylemine ileten ve daha sonra veritabanına kaydetmeye çalışan bir HTTP POST .


1
Bir raylar eğitim sitesinde tam olarak bu bilgileri yağsız. Alakalı olana kadar kullanana kadar değildi.
StorymasterQ

249

Gönderen ActiveRecord :: Base belgelerinde:

create (attributes = nil) {| nesne | ...}

Bir nesne (veya birden çok nesne) oluşturur ve doğrulamalar geçerse onu veritabanına kaydeder. Elde edilen nesne, nesnenin veritabanına başarıyla kaydedilip kaydedilmediği döndürülür.

new (attributes = nil) {| block_given ise kendini? | ...}

Yeni nesneler boş olarak (yapı parametresini geçmez) veya özniteliklerle önceden ayarlanmış ancak henüz kaydedilmemiş olarak ilişkilendirilebilir (ilişkili tablo sütun adlarıyla eşleşen anahtar adlarıyla bir karma geçirin). Her iki durumda da, geçerli nitelik anahtarları ilişkili tablonun sütun adlarıyla belirlenir; bu nedenle tablo sütunlarının parçası olmayan niteliklere sahip olamazsınız.

Böylece createyeni nesneyi başlatır, doğrular ve sonra veritabanına kaydeder. Ve newyalnızca yerel nesneyi oluşturur ancak onu doğrulamaya veya DB'ye kaydetmeye çalışmaz.


6
Bu soru model yöntemlerle değil, denetleyici yöntemleriyle ilgilidir.
sevenseacat

8
@Karpie - Downvote için teşekkürler. İyi bir noktaya değiniyorsunuz, ancak pek çok insanın bu cevabı yararlı bulduğunu düşünün, özellikle ne başlık ne de etiketler sadece denetleyici sorusu olarak adlandırmıyor. Bence bu cevap aynı değeri veriyor.
Justin Ethier

17

Yeni, yeni bir Model örneğini başlatır, ancak kaydetme yöntemi çağrılıncaya kadar kaydedilmez.

Create, yeni ile aynı şeyi yapar, ancak veritabanına da kaydeder.

Bazen bir şeyi veritabanına kaydetmeden önce bir şeyler yapmak istersiniz, bazen sadece hemen oluşturmak ve kaydetmek istersiniz.


1
Bu soru model yöntemlerle değil, denetleyici yöntemleriyle ilgilidir.
sevenseacat

11

RESTful Rails bölümleri HTTP protokolünün çalışma şekline çok yakın olacak şekilde yapılmıştır. HTTP protokolünde, bir GET isteğinin herhangi bir veriyi değiştirmesi gerekmez. Mantıksal olarak, Rails'teki tüm RESTful eylemlerinin çalışma şekline bakarsanız, HTTP eylemleriyle eşleşir. Bir POST yeni veri oluşturmak içindir, bu nedenle mantıksal olarak oluşturulur. Bir GET, bunun form biçimini veya başka bir deyişle yeni eylemi sunmak için kullanın. Dizin ve şov da GET'tir, güncelleme bir PUT'dur (veya Rails 4+'da PATCH) ve destroy HTTP'de bir DELETE'dir.

Buna ek olarak, kontrolördeki mantığı güzel bir şekilde ayırır ve hatalarla başa çıkmanın yumuşak bir yolunu sunar (yeni eylemi hata mesajlarıyla yeniden oluşturarak).


"You use a GET to serve the form version of that or in other words, the new action"cevap için teşekkürler ama şahsen bu adlandırma kuralını gerçekten kafa karıştırıcı buluyorum
Daniel Lizik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.