2012-02-16 30 views
20

Rails'e yeniyim ve bir GET isteği yerine bir PUT isteği veren bir link oluşturmak için link_to yardımcısını kullanmaya çalışıyorum. Özellikle, uygulamasındaki bir kullanıcının hesabını yönetici panelinden etkinleştiren bir bağlantı oluşturmaya çalışıyorum. Rails 3.0.5 kullanıyorum.Ruby on Rails link_to put Yöntemi ile

Benim routes.rb dosyası vardır:

match '/admin/users/:id/activate' => 'admin#activate_user', 
    :action => :activate_user, :via => :put 

Bence vardır:

link_to 'Activate', :action => :activate_user, :id => user.id, :method => :put 

Ancak bu (örneğin) URL kaynak kodu <a href="/admin/users/7/activate?method=put">Activate</a> ile /admin/users/7/activate?method=put üretir.

ben, neden bu davranış görüyorum ben button_to kullanabilirsiniz farkındayım ama bir süre bu konuyla mücadele ettiğime ve kafam karıştı, bunun yerine, üretmek için <a href = "/admin/users/7/activate" data-method="put">Activate</a>

istiyorum Diğer öğreticiler, yaptığım şeyin geçerli olduğunu söylediğinde. İstediğim davranışa bir link_to yardımcısı oluşturmaya nasıl gidebilirim?

cevap

25

Güncel - Bir yöntem belirtilmedikçe link_to yardımcısı GET yapar.

Rota dosyalarınızda match yerine tam istek türünü belirtin. olarak Rotalarda put tarafından match değiştirilmesi konusunda nasıl:

put '/admin/users/:id/activate' => 'admins#activate_user', :as => 'activate_user' 

link_to 'Activate', activate_user_path(user.id), method: :put 

activate_user yöntem admins denetleyicisi bulunması gerekmektedir. docs, link_to yardımcısı hakkında daha fazla bilgi içeriyor.

+1

Tırmık yolları yukarıdaki put yol için ne üretir? Mesaj gönderebilir misin? – prasvin

+1

Bu, teşekkürler! Ve bu en temiz çözüm :) – maksim

+4

Bu benim için çalışmıyor. Link_to'da herhangi bir yöntem tanımlanmamışsa, No route ile [GET] hata mesajı eşleşir. – ndemoreau

30

link_to:method => :put'un yol karma bölümünün bir parçası olduğunu düşünmektedir. Aksini söylemelisin. Yolunuzu parantez içine alın.

link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put 

Şimdi link_to bir seçenek, bağlantının yolunun değil parçası olarak :method => :put tanıyacaktır.

Bir yan not olarak, mümkün olduğunda yol karmaları yerine yol yardımcılarını kullanmaya çalışmalısınız. İşleri güzel ve düzenli tutar, ve bunun gibi niteleyici durumlardan kaçınır.