我想要一个链接来更新资源,而不是使用HTML表单。
路由:
resources :users do
resources :friends
end
Rake路由:
user_friend GET /users/:user_id/friends/:id(.:format){:action=>"show", :controller=>"friends"}
PUT /users/:user_id/friends/:id(.:format){:action=>"update", :controller=>"friends"}
我想使用put通过一个简单的链接来更新一个朋友,如下所示:
<%= link_to "Add as friend", user_friend_path(current_user, :method=>'put') %>
但当我单击该链接时,它会尝试进入show操作。
这样做的正确方法是什么?
发布于 2011-01-21 04:09:25
link_to "Add as friend", user_friend_path(current_user, @friend), :method=> :put
将插入一个属性'data-method‘设置为'put’的链接,该链接将被rails javascript拾取并在幕后转换为表单……我想这就是你想要的。
您应该考虑使用:post,因为您似乎是在两个用户之间创建一个新的链接,而不是更新它。
发布于 2020-05-23 02:56:26
问题是您将该方法指定为URL查询参数,而不是link_to
方法的一个选项。
这里有一种方法可以让你实现你想要的:
<%= link_to "Add as friend", user_friend_path(current_user, friend), method: 'put' %>
# or more simply:
<%= link_to "Add as friend", [current_user, friend], method: 'put' %>
使用link_to
帮助程序更新模型属性的另一种方法是传递查询参数。例如:
<%= link_to "Accept friend request", friend_request_path(friend_request, friend_request: { status: 'accepted' }), method: 'patch' %>
# or more simply:
<%= link_to "Accept friend request", [friend_request, { friend_request: { status: 'accepted' }}], method: 'patch' %>
它会发出这样的请求:
Started PATCH "/friend_requests/123?friend_request%5Bstatus%5D=accepted"
Processing by FriendRequestsController#update as
Parameters: {"friend_request"=>{"status"=>"accepted"}, "id"=>"123"}
您可以在控制器操作中处理它,如下所示:
def update
@friend_request = current_user.friend_requests.find(params[:id])
@friend_request.update(params.require(:friend_request).permit(:status))
redirect_to friend_requests_path
end
https://stackoverflow.com/questions/4751869
复制相似问题