我有一个表单,用户可以在其中填写表单字段包含 email_id 列的详细信息
现在如果用户已登录,会显示一个链接,并说明
“ NOT USER NAME ”例如“ NOT VIREN NEGI ”针对该电子邮件字段,该字段将是ajax request.to销毁设计会话
一旦用户点击链接,设计会话将被销毁,并且在ajax成功时,上面的锚标签将会消失
我已经通过Moneypatching Devise的破坏方法实现了这个解决方案,如
class DeviseSessionsController < DeviseController
def destroy
.... DEVISE CODE ...
.... DEVISE CODE ...
.... DEVISE CODE ...
respond_to do |format|
if request.xhr? **## My Hack**
format.js { render :partial => 'users/signout' } **## render signout partial on ajax request**
else
format.any(*navigational_formats) { redirect_to redirect_path }
format.all do
method = "to_#{request_format}"
text = {}.respond_to?(method) ? {}.send(method) : ""
render :text => text, :status => :ok
end
end
end
end
end
这一切似乎都有效,但是从那以后我对此不满意
任何人都可以帮助我
请避免回答monkeypatching是不好的要求我阅读monkeypatching所有这些东西(我知道),为什么问题发布。
谢谢
答案 0 :(得分:2)
您可以使用设计帮助方法注销
在用户控制器中创建一个动作
def log_me_out
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
respond_to do |format|
format.js { render :partial => 'log_me_out',:layout => false }
end
end
这将使您免于moneypatching devise#sessions controller
希望这个帮助
答案 1 :(得分:0)
您需要添加csrf元标记以进行请求。我认为这是问题,而不是设计。
这应该解决它
$.ajaxSetup({
'beforeSend': function(xhr) { xhr.setRequestHeader('X-CSRF-Token', $("meta[name='csrf- token']").attr('content')); }
});