将form_tag指向Controller的Update Action

时间:2016-01-03 08:13:02

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

我认为这有这个;我将“新”和“编辑”视图与仅使用下面的代码段相似,该代码段指示表单是补丁还是帖子。

<% @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?

2 个答案:

答案 0 :(得分:0)

尝试

<% @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参数的一部分。如果要将当前页面指定为nil

,也可以将action作为第一个参数传递

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

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

答案 1 :(得分:0)

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

Rails form_for documentation