form_for但要发布到其他操作


122

我想要一个form_for @user,但发布到用户控制器中的自定义操作。

我怎样才能做到这一点?

Answers:


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

要么

form_for @user, :url => whatever_path

15
我认为url_for没有必要。另外,由于控制器是相同的,因此您可以使用form_for @user, :url => :action => 'myaction'
rubyprince 2011年

1
上面的答案是有帮助的,但我必须对其进行一些调整,否则POST始终会路由到编辑控制器操作,否则:<%= form_for(@user,url:{action:“ myaction”}},method::post)可以| user_form | %>。请注意,这是用于views / users /文件夹中的视图文件。
AarCee 2015年

42

以下对我有用:

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

1
这可行。通过搜索action:动作冒号api.rubyonrails.org/classes/ActionView/Helpers
2014年

3
嗯不确定。我已经放了,form_for @user, url: {action: 'myaction'}但这给了我No route matches {:action=>"myaction", :controller=>"users"}错误。
lulalala 2015年

@lulalala,当然,您还必须设置路线。在这种情况下,例如:resources :users do collection do get :myaction end end
tagaism


4

另外,可以使用form_tag以下语法达到相同的目的:

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

http://guides.rubyonrails.org/form_helpers.html#multiple-hashes-in-form-helper-calls中所述


的确如此,但是问题是关于一个特定的对象-在这种情况下@user。使用form_tag不会将对象的属性绑定到表单字段。
迪伦·皮尔斯

3

如果要在渲染部分表单时将自定义Controller传递给form_for,则可以使用以下命令:

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

然后以部分形式使用此局部变量,如下所示:

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

3

新语法

<%= form_for :user, url: custom_user_path, method: :post do |f|%>
<%end%>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.