【问题标题】:form_for but to post to a different actionform_for 但发布到不同的操作
【发布时间】:2019-12-08 12:24:05
【问题描述】:

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

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:
    form_for @user, :url => url_for(:controller => 'mycontroller', :action => 'myaction')
    

    form_for @user, :url => whatever_path
    

    【讨论】:

    • 我不认为url_for 是必要的。另外由于控制器是相同的,你可以使用form_for @user, :url => :action => 'myaction'
    • 以上答案很有帮助,但我不得不稍微调整一下,否则 POST 总是路由到编辑控制器操作,否则:。请注意,这是针对 views/users/ 文件夹中的视图文件。
    【解决方案2】:

    以下对我有用:

    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"} 错误。
    • @lulalala,当然,您也必须设置路线。在这种情况下,例如:resources :users docollection doget :myactionendend
    【解决方案3】:

    我就是这么干的

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

    注意可选参数id设置为用户实例id属性。

    【讨论】:

      【解决方案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 不会将对象的属性绑定到表单字段。
      【解决方案5】:

      如果您想在渲染部分表单时将自定义控制器传递给 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| -%>
      

      【讨论】:

        【解决方案6】:

        新语法

        <%= form_for :user, url: custom_user_path, method: :post do |f|%>
        <%end%>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-16
          • 1970-01-01
          • 2012-09-25
          • 2014-02-02
          • 2013-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多