我想在友谊控制器中使用drop
动作来放弃友谊请求,我正在努力了解如何创建工作表单和工作路线。
我在config/routes.rb
resources :friendships, only: [:create, :destroy] do
member do
post :drop
end
end
这将生成命名路由drop_friendship_path(id)
。
我现在的问题是如何创建一个工作表单,这就是我必须使用form_for
或form_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_for
和form_tag
一起使用的参数文档。 api documentation表示:url
form_for
的参数可以与传递给url_for
或link_to
的值相同的方式表示。例如,您可以直接使用命名路由。但url_for
或link_to
上的文档不会添加任何其他内容。
我在form helpers section和form_for的guides {rubyonrails.org form_tag中仅找到了示例,而不是详尽的文档,因此我意识到url
为{ {1}}可以包含子参数哈希(但只报告form_for
),并且action
和controller
参数可以传递给action
。
form_tag
帮助器中url
哈希的完整参数列表是什么?
form_for
助手的相关参数列表是什么?
我的表格需要哪些?
如果我使用的是form_for或form_tag:
,而不是指定控制器和操作form_tag
并在url: drop_friendship_path(@friendship_request)
操作中定义了@friendship_request
,会有效吗?
答案 0 :(得分:2)
更好的方法是使用button_to
或link_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
?
而且,为每个用户发送单独的查询以获取友谊记录并不是一件好事。你应该想想如何避免这种情况。有许多解决方案,但它不是问题的主题。