【问题标题】:Pointing the form_tag to the Update Action of the Controller将 form_tag 指向控制器的更新操作
【发布时间】:2016-04-07 02:05:35
【问题描述】:

我有这个看法;我使“新”和“编辑”视图相似,只有以下 sn-p 指示表单是补丁还是帖子。

<% @selected_holiday[:id].present? ? (current_method = :patch) : (current_method = :post) %>
<%=
    form_tag( {method: current_method},
              class: 'create_form',
              id: "new_holiday_form",
              :"data-parsley-validate" => "" ) do
%>

我的路线包含:

                  human_resources_settings_holidays GET      /human_resources/settings/holidays(.:format)                         human_resources/settings/holidays#index
                                                      POST     /human_resources/settings/holidays(.:format)                         human_resources/settings/holidays#create
                 new_human_resources_settings_holiday GET      /human_resources/settings/holidays/new(.:format)                     human_resources/settings/holidays#new
                edit_human_resources_settings_holiday GET      /human_resources/settings/holidays/:id/edit(.:format)                human_resources/settings/holidays#edit
                     human_resources_settings_holiday GET      /human_resources/settings/holidays/:id(.:format)                     human_resources/settings/holidays#show
                                                      PATCH    /human_resources/settings/holidays/:id(.:format)                     human_resources/settings/holidays#update
                                                      PUT      /human_resources/settings/holidays/:id(.:format)                     human_resources/settings/holidays#update

http://localhost:3000/human_resources/settings/holidays/7d525fe6-b1e7-11e5-b6e8-00ff6a8ddd39/edit

我明白了:

http://localhost:3000/human_resources/settings/holidays/7d525fe6-b1e7-11e5-b6e8-00ff6a8ddd39/edit?method=patch

因此:

The action '7d525fe6-b1e7-11e5-b6e8-00ff6a8ddd39' could not be found for HumanResources::Settings::HolidaysController

如何不点击编辑路径并通过 PATCH?

【问题讨论】:

    标签: forms ruby-on-rails-4 activerecord routes nested-routes


    【解决方案1】:

    试试

    <% @selected_holiday[:id].present? ? (current_method = :patch) : (current_method = :post) %>
    <%=
        form_tag(human_resources_settings_holiday_path, method: current_method,
                  class: 'create_form',
                  id: "new_holiday_form",
                  :"data-parsley-validate" => "" ) do
    %>
    

    您的示例 make 中的第一个参数是 URL 参数的一部分。如果要将当前页面指定为action,也可以将nil 作为第一个参数传递

    http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag

    您可能也想相应地切换表单操作路径

    【讨论】:

      【解决方案2】:

      这可能是重构的好时机,因此您根本不必进行此检查。 rails form_for :resource 帮助器允许您传入资源,在本例中为 @selected_holiday,它将创建适当的方法/操作。

      Rails form_for documentation

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 2015-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多