我正在尝试让控制器的“破坏”正常工作,我想知道正确的设置应该是什么。
我得到的错误是
ActiveRecord::RecordNotFound in AuthenticationsController#destroy
Couldn't find Authentication without an ID
我的控制器看起来像
class AuthenticationsController < InheritedResources::Base
def destroy
@authentication = current_user.authentications.find(params[:id])
@authentication.destroy
redirect_to(:back)
end
数据库表
create_table "authentications", :force => true do |t|
t.integer "user_id"
t.string "provider"
t.string "uid"
t.string "secret"
t.string "token"
end
我尝试过其他参数,例如:user_id 如何让用户销毁他们的令牌? (可选择稍后重新验证)
答案 0 :(得分:2)
您没有将ID传递给控制器
试
<%= link_to "Disconnect Your Authentication", {:controller=>'authentications', :action=>'destroy', :id=>current_user.authentication_id} %>
或使用带有@autentication参数的路径助手作为选项。
(您需要编辑路线文件)
答案 1 :(得分:0)
如果您想要销毁用户的所有身份验证,您当然可以将控制器的destroy方法更改为:
def destroy
current_user.authentications.destroy_all
end
更传统的方法是销毁特定的身份验证。在这种情况下,link_to
方法需要一个包含id参数的路径(最终将作为控制器中的params[:id]
值)。你可以想象一个像下面这样的视图片段,它显示了所有用户的认证,每个认证都带有一个destroy链接:
<ul>
<% current_user.authentications.each do |a| %>
<li>
<%= a.provider %>
-
<%= link_to 'Disconnect Your Authentication', authentication_path(a), :method => :delete %>
</li>
<% end %>
</ul>
这假设current_user是一个帮助程序,并且您的路由是在您的身份验证模型上设置的。 authentication_path
帮助程序使用a
身份验证实例生成路径,并带有id参数。