2010-11-16 21 views
6

Bir PUT eylemi gerçekleştirmek istediğim bir button_to'm var (bu kaynak hakkında yalnızca güncelleştirilebilecek bir şey var - bu 'kabul edildi' olarak güncelleştirilecek Yani, eylemi ateşlemeyle ilişkili başka bir form alanı yoktur).Rails3 button_to, POUT eylemini çağırıyor, PUT eylemini çağırmaya çalışıyor

Bu benim görünümünde olan

(düğme bir başka kontrolöre ait görünümünde olduğu için kontrolör açıkça verilmiştir): Benim yolları dosyasında

<%= button_to "Acknowledged", :controller => 'practice_sessions', :id => @practice_session.id, :method => :put %> 

, kaynak dinlendirici kaynak olarak ilan edilmiştir :

resources :practice_sessions 

Bu kaynağın denetleyicisi, bir oluşturma ve bir güncelleme eylemine sahiptir ve yukarıdaki düğme, oluşturma eylemini çağırır. Güncelleme eylemini çağırmasını istiyorum.

Bu hak oluşturmak eylem yangınları önce günlüğüne yoluyla geliyor:

Started POST "/practice_sessions?id=21&method=put" for 127.0.0.1 at 2010-11-17 08:52:46 +0000 
    Processing by PracticeSessionsController#create as HTML 
    Parameters: {"authenticity_token"=>"1EW0IlI38d0f4wST5azrCEZVZPfih7i0UvCGSF7eqbc=", "id"=>"21", "method"=>"put"} 

cevap

17

Kişisel sözdizimi biraz kapalıdır. button_to üç bağımsız değişken alır: düğme başlığı, options karma ve html_options karma. :method=>:put adresinin html_options numaralı telefona girmesi gerekiyor, bu arada yol parametrelerinin options içinde gitmesi gerekiyor. Yani şöyle yazabilirsiniz:

<%= button_to "Acknowledged", { :controller => 'practice_sessions', 
    :id => @practice_session.id}, 
    :method => :put %> 

isteği PracticeSessionsController#update

+0

Merhaba, bunun için teşekkürler. Şimdi "Rota eşleşmiyor"/practice_sessions "'alıyorum. Bence bu, bu durumda/practice_sessions/26 yerine (http: // localhost: 3000/practice_sessions? Id = 26 URL'sinde görüldüğü gibi) sadece/practice_sessions için. Onunla oynamaya devam edeceğim, ama herhangi bir ipucu takdir! – pakeha

+0

'Rake rotalarının çıkışı nedir? – zetetic

+0

Beklendiği gibi görünüyor. practice_session PUT /practice_sessions/:id(.:format) {: action => "güncelleme",: kontrolör => "practice_sessions"} practice_sessions SONRASI/practice_sessions (Burada ilgilendiren hayal çizgilerdir. : format) {: action => "create",: controller => "practice_sessions"} – pakeha

1

Açıkça html_options karma :method => :put argüman iletilmesi gerekebilir tarafından ele alınmalıdır tıklandığında - bu options karma içine globbed alma olabilir .

bu deneyin:

<%= button_to "Acknowledged", { :controller => 'practice_sessions', :id => @practice_session.id }, :method => :put %> 

Ben iyi iş gibi görünüyor adlandırılmış yolları kullanarak daha dinlendirici bir yaklaşım ile gitmeye karar Sonunda

+0

Hey, bu benim için işe yaramaz (benim zeteticime cevabımı görün), ama onu adlandırılmış rotalar kullanarak çözdüm (cevabıma bakın). Yine de yazdıkların için teşekkürler - ayrı tartışmaları zaten fark etmeliydim. – pakeha

1

(:controller ve :id etrafında açık parantez unutmayın). Hala diğer yöntemin neden işe yaramayacağına% 100 emin değilim, fakat bunun önemli olduğunu düşünmüyorum çünkü bu durum hem daha düzenli hem de b) daha geleneksel görünüyor.

<%= button_to "Acknowledge", practice_session_path(@practice_session), :method => :put %> 
İlgili konular