55
gönderen bağlantılar için

Bir gönderi isteğinde bulunmam gereken bir link var. Normalde jQuery'yi kullanır ve bağlantının varsayılan davranışını engeller ve sonra hedefe bir form gönderirdim. Bu, Rails'in bana yardımcı olabileceği bir şey gibi görünüyor. Tabii ki, link_to yöntem bir POST http yöntemini belirtmek için bir seçenek vardır:Rayları Kullanma link_to

link_to "Profile", 'http://example.com/profile', method: :post 

çalışır, ama ben de 2 parametreler eklemeniz gerekir. Denedim: Sadece <a> HTML öğesi bu parametreleri eklendi ama linkine tıklayıp zaman o teslim etmedi

link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2' 

:

<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a> 

parametrelerle bir POST isteği yapmak için bir yolu var mı link_to veya başka bir Rails yöntemini kullanarak? Rails 3.2.9 kullanıyorum.

+0

Bunu yapabileceğinizi düşünmüyoruz. muhtemelen kontrol cihazınızda net/http veya HTTParty ile en iyi şekilde yapıyor musunuz? –

+0

Denetleyicimde yapamıyorum, kullanıcının diğer siteye yönlendirilmesi gerekiyor. Yine de haklısınız gibi görünüyor, benim için bunu yapmak için yerleşik bir bağlantı mekanizması yok. –

cevap

94

Kısa cevap, "parametreler" ile kastediyorsanız, form alanları ise, bunu yapamazsınız (en azından görebildiğim şekilde değil). Bunun yerine, bir bağlantıya benzeyecek şekilde biçimlendirilmiş bir gönderme düğmesiyle bir form kullanmalısınız (eğer böyle görünmesini istiyorsanız). Öte yandan sen sorgu parametreleri anlamına olsaydı

, o zaman bu işe yarar: Böyle olmazsa

link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post 

:

link_to "Profile", profile_path(@profile.id, param1: 'value1', param2: 'value2'), method: :post 
+1

Sadece sorumu güncelledim, aslında bu bağlantılar için harici bir URL kullanıyorum. –

+0

Temel olarak, yapmak istediğiniz şeyin bir bağlantı kullanarak mümkün olmadığını söyleyerek bir not ekledim. Gönder düğmesine sahip bir forma ihtiyacınız var. –

+2

Bir kullanıcı javascript'i devre dışı bıraktıysa, bağlantının bir "GET" isteğine varsayılan olacağını unutmayın. – bkunzi01

9

URL'de bu şekilde parametrelerini kodlamak İhtiyaçlarınıza uyacak şekilde link_to'dan daha iyi bir form kullanabilirsiniz.

+0

Bu gerçekten parametreleri eklemenin çok güzel bir yoludur. – nathanvda

+0

İhtiyaçlarım için çalışmaz, parametrelerin POST parametreleri olması gerekir. Ama teşekkürler, to_param yöntemini bilmiyordum. Ayrıca profilden sonra bir '' 'öğesine de ihtiyacınız var. –

+0

Tamam Anladım, o zaman bir form yazman gerektiğini düşünüyorum. Bu mantığı birkaç kez tekrar etmeniz gerekiyorsa, bu formu oluşturacak bir yardımcı metodu yazabilirsiniz. –

1

POST verisi için bir forma ihtiyacınız var. Ancak, bir gönderme düğmesine ihtiyacınız yoktur. Bunun bir nedenden dolayı bir bağlantıya benzemesini istiyorsanız, bu formu JavaScript aracılığıyla gönderen bir bağlantı haline getirebilirsiniz. Aşağıdaki örnekte, POST kaynağı herhangi bir alan gerektirmeyen bir REST eylemidir, böylece form giriş kontrolleri yoktur. Bazı verileri göndermek istiyorsanız, gizli girdi alanlarını forma yazmanız yeterlidir. (': Inline display' örneğin)

1

parametrelerini ve http yöntemi {param1: 'value1', param2: 'value2', :method: :post}

<%= link_to "Profile", profile_path(@profile), {param1: 'value1', param2: 'value2', method: :post} %> 
birlikte olmalı bu verilerin stilini veya CSS ile gizleyebilirsiniz böylece

<%= form_tag('http://something_postable', :method => :post, :class => 'internal') %></form> 
<%= link_to_function('Label for Link', 'previous("form").submit()', :title => 'Hover text for link') %> 

formu bir sınıf atanır

0

Kullanıcı JS devre dışıysa veya varsayılan olarak gelmeyen göze çarpan JS kitaplıklarını kaldırmışsanız, link_to'un GET isteği yoluyla sessizce gönderileceğini unutmayın.

Genel olarak, POST isteklerini gerçekleştiren bağlantılara sahip olmayı çok istemiyorum. Bence bu bir formun ve bir düğmenin rolü.

button_to 'Profile', profile_path(@profile, param1: 'value1', param2: 'value2') 

button_to da method seçeneğini destekler ama post için varsayılan olarak bu yüzden sadece bunu ihmal ettik:

Böylece kolay (ve daha güvenli) alternatif Raylar button_to yardımcı kullanmaktır.