【发布时间】:2019-12-08 12:24:05
【问题描述】:
我想要一个form_for @user,但要发布到用户控制器中的自定义操作。
我该怎么做?
【问题讨论】:
标签: ruby-on-rails
我想要一个form_for @user,但要发布到用户控制器中的自定义操作。
我该怎么做?
【问题讨论】:
标签: ruby-on-rails
form_for @user, :url => url_for(:controller => 'mycontroller', :action => 'myaction')
或
form_for @user, :url => whatever_path
【讨论】:
url_for 是必要的。另外由于控制器是相同的,你可以使用form_for @user, :url => :action => 'myaction'
以下对我有用:
form_for @user, :url => {:action => "YourActionName"}
【讨论】:
action: (action Colon) api.rubyonrails.org/classes/ActionView/Helpers/… 在官方文档中查看
form_for @user, url: {action: 'myaction'},但它给了我No route matches {:action=>"myaction", :controller=>"users"} 错误。
resources :users docollection doget :myactionendend
我就是这么干的
<%= form_for :user, url: {action: "update", params: {id: @user.id}} do |f| %>
注意可选参数id设置为用户实例id属性。
【讨论】:
也可以使用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 不会将对象的属性绑定到表单字段。
如果您想在渲染部分表单时将自定义控制器传递给 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| -%>
【讨论】:
新语法
<%= form_for :user, url: custom_user_path, method: :post do |f|%>
<%end%>
【讨论】: