Ben senin varsayım doğru olmadığını iddia ediyorum. soruyorsunuz. Bir kullanıcı bir form düzeltildiğinde hataları düzeltmek için tarayıcı çubuğunda URL'nin nasıl değiştirilmesini engellerim?
Cevap ise kullanıcı hatalarını düzeltmek için formu yeniden gördüğünde tarayıcınızdaki URL değişmez. Çünkü form ilk kez gönderildiğinde URL zaten değişmişti. senin şu yolları olurdu bir routes.rb
şu ortak sözleşmeler ile
(onları listelemek için rails routes
kullanın): Eğer /users/:id/edit
bir GET
istek yaptığınızda
GET /users(.:format) users#index
POST /users(.:format) users#create
GET /users/new(.:format) users#new
GET /users/:id/edit(.:format) users#edit
GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
kullanıcı güncelleme formu oluşturulur. Ancak, bu formdaki gerçek güncelleme isteği PATCH /users/:id
'a gönderilir. Bu, tarayıcının zaten başka bir URL kullandığı anlamına gelir.
- şey Render:
update
yöntemi içinde temelde sadece iki seçenek var (URL'den /users/:id
zaten olduğunu unutmayın). Eylem içerisindeki bir görünümü oluşturmak URL'yi aynı tutar (hala /users/:id
olur), ancak bir formdaki hatalarını göstermek için örneğin @user
'a atanan kullanıcıyı kullanma değişikliğine sahipsiniz. Bir güncelleştirme başarısız olduğunda Rails'in varsayılan davranışı budur.
- Tarayıcıyı başka bir URL'ye yönlendirebilirsiniz (örneğin,
/users/:id/edit
ya da ana sayfa gibi tamamen farklı bir URL'ye geri dönebilirsiniz). Bu, tarayıcının adres çubuğundaki URL'yi değiştirir. Ancak bir yönlendirme her zaman yeni bir GET
isteği yapar, yani post
aracılığıyla gönderilen bilgileri kaybederseniz ve @user
için atanmış olan User
örneğini kaybedersiniz. Bir GET
'dan sonra kullanıcı veritabanından yeniden yüklenir ve bu nedenle hiçbir hata atanmaz. Rails'de, kullanıcı tarayıcıdaki yeniden yükle düğmesine basarsa, güncelleme başka bir POST
önlemek için başarılı olduğunda yönlendirme kullanılır.
IMHO, sorunuzun yanıtı: Rails tarafından seçilen yoldan ayrılmadan ve tamamen farklı bir rota, denetleyici ve form ayarı oluşturmadan istediğinizi yapamazsınız. GET
ve PATCH
(veya POST
) istekleri için aynı olan bir yolu yapılandırmanız gerekir. Ve denetleyici yönteminin, her iki istek türünü de farklı şekillerde ele alabilmesi gerekiyordu. Rails 2.0 kaynak yönlendirme tercih edilen yoldur. İstediğiniz şey, Rails 2.0
'dan önce yaygındı. Tavsiyem: Raylar kurallarına uyun. URL önemli değil, kimsenin umurunda değil. Rails sözleşmelerinin, bir form için başka bir URL'ye sahip olmamanın bir yararı yok.
've 'redirect_to' yöntemi gibi şeylerin mantıksal olarak doğru bir değer döndürdüğüne dair hiçbir garanti olmadığından geri dönmek kötü bir alışkanlıktır. Geri dönüş redirect_to yapmak çok daha iyidir ... böylece başarısız olacak bir şans yok. – tadman
Normalde '@ user.update_attributes!' Seçeneğini ve yönlendirmeyi öneriyorum. Eğer bir problem güncellenirse, 'render (action: 'edit')' ile başlatabileceğiniz ve işlem yapabileceğiniz bir 'ActiveRecord :: RecordInvalid' hatası alırsınız. – tadman
Yorumlarınızı okuduktan sonra yanıtın ne olduğu açık değil. Yürütme, modelde bir hata olduğu için açıkça 'oluşturma' düzenleme '' satırına aktarılıyor, ancak sonuçta elde edilen sayfadaki URL, öncekiyle aynı değil. –