使用 Devise 删除附件(头像)

Delete an attachement (an avatar) with Devise

提问人:Maria Maximova 提问时间:5/30/2020 最后编辑:Maria Maximova 更新时间:5/30/2020 访问量:247

问:

在我的视图文件中,我想添加一个链接来删除当前头像(如果已附加)。我最终得到了这样的东西:registrations/edit.html.erb

<% if current_user.avatar.attached? %>
    <%= link_to "Remove avatar", { action: :remove_avatar }, method: :put %>
<% end %>

在自定义(继承自 )中,我定义了一个方法:registrations_controllerDevise::RegistrationsController:remove_avatar

def remove_avatar
    self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
    resource.avatar.purge_later
end

但是我遇到了这个错误,这可能是由于缺少路由设置引起的。

没有路由匹配 {:action=>“remove_avatar”, :controller=>“registrations”, :locale=>:ru}

我能做些什么来link_to这种方法?谢谢。

Ruby-on-Rails 设计 附件 Gravatar

评论


答:

0赞 sflang 5/30/2020 #1

也许你需要这样的东西

put "remove_avatar", to: "registrations#remove_avatar"

在您的 routes.rb 文件中。

也许由于您的目录结构,它可能会变得比这更混乱,但它应该可以工作

评论

0赞 Maria Maximova 5/30/2020
我用过这个,不幸的是,它也没有用devise_for :users, :controllers => { registrations: 'registrations' } do put "remove_avatar", to: "registrations#remove_avatar" end
0赞 sflang 5/30/2020
你也可以命名一个路由,比如: ,然后去 rake 路由 找到这个新创建的路由的名称(假设它是 devise_my_remote_avatar),这样你就可以做 ,这将直接解析到该路由put "remove_avatar", to: "registrations#remove_avatar", as: "my_remove_avatar"link_to "Remove avatar", devise_my_remote_avatar_path
0赞 Maria Maximova 5/30/2020
问题在于,当代码放在devise_for之间时,它甚至不会生成该特定路由。我想我的路线做错了什么
0赞 sflang 5/31/2020
看起来不接受块。可能您正在寻找允许语法的方法devise_fordevise_scopedevise_scope do end