自定义操作的 form_for 和 form_tag 参数
form_for and form_tag parameters for custom action
我想在友谊控制器中使用 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 of guides.rubyonrails.org for form_for and form_tag 中只找到了示例,而不是详尽的文档,所以我意识到 url
for form_for
可以有子参数的散列(但是只有 action
被报告),并且 controller
和 action
参数可以传递给 form_tag
.
form_for
助手中 url
散列的完整参数列表是什么?
form_tag
助手的相关参数列表是什么?
我的表格中需要哪些?
如果我没有指定控制器和动作,而是在 form_for 或 form_tag 中使用:
url: drop_friendship_path(@friendship_request)
并在 drop
操作中定义了 @friendship_request
,这行得通吗?
更好的方法是根据您的目的使用 button_to
或 link_to
助手。 button_to
生成一个表单。 link_to
生成 link,但也可以发送带有 {method: :post}
选项的 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
来删除友谊?
而且,为每个用户发送一个单独的查询来获取好友记录也不是一件好事。您应该考虑如何避免这种情况。解决方法有很多,但不是问题的主题。
我想在友谊控制器中使用 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 of guides.rubyonrails.org for form_for and form_tag 中只找到了示例,而不是详尽的文档,所以我意识到 url
for form_for
可以有子参数的散列(但是只有 action
被报告),并且 controller
和 action
参数可以传递给 form_tag
.
form_for
助手中 url
散列的完整参数列表是什么?
form_tag
助手的相关参数列表是什么?
我的表格中需要哪些?
如果我没有指定控制器和动作,而是在 form_for 或 form_tag 中使用:
url: drop_friendship_path(@friendship_request)
并在 drop
操作中定义了 @friendship_request
,这行得通吗?
更好的方法是根据您的目的使用 button_to
或 link_to
助手。 button_to
生成一个表单。 link_to
生成 link,但也可以发送带有 {method: :post}
选项的 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
来删除友谊?
而且,为每个用户发送一个单独的查询来获取好友记录也不是一件好事。您应该考虑如何避免这种情况。解决方法有很多,但不是问题的主题。