2017-05-25 55 views
0

我在禁用JS时测试了我的网站。并得到一个有趣的错误。禁用javascript时无法退出设计

它发生在着陆页上,当Client登录并尝试注销。 (Client是一个设计模型)

我的导航栏有此注销链接:启用JS时

<li><%= link_to 'exit', destroy_client_session_path, method: :delete %></li> 

一切顺利,但是当JS被禁用我得到这个错误:

ActiveRecord::RecordNotFound in ClientsController#show 
Couldn't find Client with 'id'=sign_out 

这发生在clients_controller.rb(我有一个clients文件夹,其中包含所有设计控制器:confirmations_controller.rbomniauth_callbacks_controller.rb,...但我也有一个clients_controller.rb文件与经典的REST:show,...)

错误发生在该控制器的show动作:

def show 
    if client_signed_in? && current_client.id == Client.find(params[:id]).id then 
     @client = Client.find(params[:id]) 
    else 
     redirect_to root_path 
    end 
    end 

我检查这里如果当前登录的client是匹配的是在导航栏通过客户端,所以只有登录客户可以看到他们非常档...

虽然控制器无法进行检查似乎..

我的问题:为什么将签出送我到客户端控制器,为什么ENAB ling或禁用JS在这里有一个作用?

回答

1

这是因为设计默认使用delete HTTP动词,这个技巧取决于jquery-ujs的工作。

= link_to .... method: :delete 

按照jquery-ujsdocs这样做除其他事情......

make non-GET requests from hyperlinks;

您可以更改您的config/initializers/devise.rb

# change :delete to :get 
config.sign_out_via = :get 

,然后你的link_to应该是

= link_to 'exit', destroy_client_session_path 
+0

该死的。奇迹般有效!!谢谢。虽然你可以确认这是Devise代码,当调用删除方法时触发JS ...原因我想删除只是一个HTTP查询是独立于JS – Maxence

+0

我更新了答案,它来自'jquery-ujs' – Iceman