我有一个用户控制器,它有以下两种销毁方法: -
def destroy
@user = User.find_by(params[:id])
@user.destroy
flash[:success] = "Account successfully closed"
redirect_to root_path
end
def destroy_avatar
@user = User.find_by(params[:id])
@user.remove_avatar!
@user.save
render 'edit'
end
第一种是删除用户的默认destroy方法。第二个是我定义的用户可以从用户编辑页面中删除他们的头像。
我在routes.rb中定义了以下内容以使destroy_avatar正常工作: -
delete '/users/:id', to: 'users#destroy_avatar', as: 'destroy_avatar'
resources :users
但不幸的是,当我实施此功能时,我在用户编辑页面上的关闭帐户按钮已恢复为destroy_avatar操作。
这是对视图中两个操作的调用: -
.
.
.
<% if current_user.avatar_url %>
<%= link_to "Delete avatar", destroy_avatar_path,
method: :delete,
data: {:confirm => 'Are you sure?'},
class: 'btn btn-xs btn-danger',
"data-toggle" => "tooltip",
"data-placement" => "right",
"title" => "Delete avatar" %>
.
.
.
<%= link_to "Close account", user_path(@user),
method: :delete,
data: {:confirm => "Are you sure?"},
class: "btn btn-xs btn-danger"%>
.
.
.
我去看看是否有办法让destroy_avatar在不使用路线的情况下工作,但是我找到了一个way用AJAX来做,而不需要额外的路线,这实际上会更方便但是我不知道Javascript,也无法根据我的情况自定义代码。
我还在学铁路,我不知道我不知道的是什么!所以我想知道我有什么选择。
有没有办法在不使用两条路线的情况下这样做?如果不是,我应该如何为destroy_avatar定制路由,以便与用户销毁操作的路由没有冲突?
答案 0 :(得分:0)
好的,我明白了。
将路线更改为
delete '/users/:id/destroy_avatar', to: 'users#destroy_avatar', as: 'destroy_avatar'
并从视图中看:
<%= link_to "Delete avatar", "/users/#{@user.id}/destroy_avatar" %>