自定义操作的form_for和form_tag参数

时间:2017-05-25 16:09:18

标签: ruby-on-rails forms form-helpers

我想在友谊控制器中使用drop动作来放弃友谊请求,我正在努力了解如何创建工作表单和工作路线。

我在config/routes.rb

中添加了以下路线
resources :friendships, only: [:create, :destroy] do
  member do
    post :drop
  end
end

这将生成命名路由drop_friendship_path(id)
我现在的问题是如何创建一个工作表单,这就是我必须使用form_forform_tag所需的参数。

因为在视图中我会迭代@users请求友谊,我不知道要删除的请求的id,所以我不能使用上面提到的路由。以下哪一项是正确的?

<%= form_for(current_user.friendship_request.find_by(requester_id: user.id), url: { action: drop }) %>

<%= form_tag({controller: "friendships_controller", action: "drop"}) do %>

我很难找到与form_forform_tag一起使用的参数文档。 api documentation表示:url form_for的参数可以与传递给url_forlink_to的值相同的方式表示。例如,您可以直接使用命名路由。但url_forlink_to上的文档不会添加任何其他内容。

我在form helpers sectionform_for的guides {rubyonrails.org form_tag中仅找到了示例,而不是详尽的文档,因此我意识到url为{ {1}}可以包含子参数哈希(但只报告form_for),并且actioncontroller参数可以传递给action

form_tag帮助器中url哈希的完整参数列表是什么?
form_for助手的相关参数列表是什么?
我的表格需要哪些?

如果我使用的是form_for或form_tag:

,而不是指定控制器和操作
form_tag

并在url: drop_friendship_path(@friendship_request) 操作中定义了@friendship_request,会有效吗?

1 个答案:

答案 0 :(得分:2)

更好的方法是使用button_tolink_to帮助程序。 button_to生成表单。 link_to生成一个链接,但也可以使用{method: :post}选项发送帖子请求。

为什么您认为自己无法使用drop_friendship_path(id)辅助方法?你可以:

<% request_id = current_user.friendship_request.find_by(requester_id: user.id) %>

<%= button_to "Drop", drop_friendship_path(request_id) %>
<!-- or -->
<%= link_to "Drop", drop_friendship_path(request_id), method: :post %>

为什么不使用现有的destroy操作删除友情而不是drop

而且,为每个用户发送单独的查询以获取友谊记录并不是一件好事。你应该想想如何避免这种情况。有许多解决方案,但它不是问题的主题。