form_for ancak farklı bir eyleme göndermek için


122

form_for @userKullanıcı denetleyicisindeki özel bir eyleme bir , ancak gönderi yapmak istiyorum .

Bunu nasıl yapabilirim?

Yanıtlar:


177
form_for @user, :url => url_for(:controller => 'mycontroller', :action => 'myaction')

veya

form_for @user, :url => whatever_path

15
url_forGerekli olduğunu sanmıyorum . Ayrıca denetleyici aynı olduğu için şunu kullanabilirsinizform_for @user, :url => :action => 'myaction'
rubyprince

1
Yukarıdaki yanıt yardımcı oldu, ancak biraz ince ayar yapmak zorunda kaldım, aksi takdirde POST her zaman düzenleme denetleyicisi eylemine yönlendiriyordu, aksi halde: <% = form_for (@user, url: {eylem: "myaction"}, yöntem:: post) do | user_form | %>. Lütfen bunun views / users / klasör içindeki bir görünüm dosyası için olduğuna dikkat edin.
AarCee

42

Aşağıdakiler benim için çalışıyor:

form_for @user, :url => {:action => "YourActionName"}

1
Bu çalışıyor. action:( Eylem iki nokta üst üste ) api.rubyonrails.org/classes/ActionView/Helpers/…
user664833

3
Hmm emin değilim. Ben koydum form_for @user, url: {action: 'myaction'}ama bana No route matches {:action=>"myaction", :controller=>"users"}hata veriyor .
lulalala

@lulalala, tabii ki rotaları da belirlemelisiniz. bu durumda, örneğin:resources :users do collection do get :myaction end end
tagaism

11

Ben böyle yaptım

<%= form_for :user, url: {action: "update", params: {id: @user.id}} do |f| %>

idKullanıcı örneği kimliği özelliğine ayarlanan isteğe bağlı parametreye dikkat edin .


4

Alternatif olarak aynı form_tagşeye sözdizimi kullanılarak da ulaşılabilir :

form_tag({controller: "people", action: "search"}, method: "get", class: "nifty_form")
# => '<form accept-charset="UTF-8" action="/people/search" method="get" class="nifty_form">'

Tarif edildiği gibi http://guides.rubyonrails.org/form_helpers.html#multiple-hashes-in-form-helper-calls


Bu doğru, ancak soru belirli bir nesne hakkında soruyor - bu durumda @user. A kullanmak form_tag, nesnenin niteliklerini form alanlarına bağlamaz.
Dylan Pierce

3

Kısmi bir formu işlerken bir form_for'a özel Denetleyiciyi geçirmek istiyorsanız, bunu kullanabilirsiniz:

<%= render 'form', :locals => {:controller => 'my_controller', :action => 'my_action'}%>

ve sonra kısmi formda bu yerel değişkeni şu şekilde kullanın:

<%= form_for(:post, :url => url_for(:controller => locals[:controller], :action => locals[:action]), html: {class: ""} ) do |f| -%>

3

yeni sözdizimi

<%= form_for :user, url: custom_user_path, method: :post do |f|%>
<%end%>
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.