2017-07-02 61 views
-1

破坏方法我有以下两种方法消灭一个用户控制器: -Rails的路线混淆定制的破坏方法与用户控制器

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 

首先是默认摧毁删除用户的方法。第二个是我定义的让用户从他们的用户编辑页面删除他们的头像的一个。

我有以下的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,并且无法自定义代码。

我还在学习rails,我不知道我不知道!所以我想知道我有什么选择。

有没有办法做到这一点,而不使用两个路线?如果不是,我应该如何自定义destroy_avatar的路由,以便与用户销毁操作的路由没有冲突?

+0

尝试改变'删除 '/用户/:身份证',为: '用户#destroy_avatar',因为:“destroy_avatar ''to'delete'/ user_avatar /:id',to:'users#destroy_avatar',as:'destroy_avatar'' – Pavan

回答

0

好吧,我想通了。

改变了路线

delete '/users/:id/destroy_avatar', to: 'users#destroy_avatar', as: 'destroy_avatar' 

,并从该视图:

<%= link_to "Delete avatar", "https://stackoverflow.com/users/#{@user.id}/destroy_avatar" %> 
+0

您可以使用'destroy_avatar_path(@user)' – Pavan