当禁用javascript时,链接和表单的解决方案是什么

时间:2013-10-13 20:13:56

标签: javascript ruby-on-rails

我有3个关于Rails和javascript被禁用的问题

1)第一种情况是link_to方法不起作用,如果它通常应该去破坏行动,它会获得显示页面解决方案是我们所知道的“优雅降级”,但我想要的是在禁用js时阻止链接工作。这样做的方法是什么?

2)第二个问题是关于注销功能(使用销毁操作),所以我有一个链接用于注销:

link_to "logout", logout_path, method: "delete"

在我的路线文件中,我有以下一行:

match "/logout", to: "sessions#destroy", via: 'delete'

如果我禁用javascript我会收到错误:

No route matches [GET] "/signout"

通过以下方式添加也是安全的:'get'??这样的路线是这样的:

match "/logout", to: "sessions#destroy", via: ['delete', 'get']

3)最后一个问题是当我有一个提交按钮的表单时,如果javascript被禁用,我会收到错误:

 ActionController::InvalidAuthenticityToken in RelationshipsController#destroy

这意味着在制作中我得到的页面“出了问题......”这里有什么解决方案?

1 个答案:

答案 0 :(得分:0)

当你使用link_to / button_to“method:delete”时,它会产生类似的东西。

<form action="/something" class="button_to" method="post">
    <div>
        <input name="_method" type="hidden" value="delete">
        <input class="btn btn-danger" data-confirm="Are you sure?" type="submit" value="Delete"> 
        <input name="authenticity_token" type="hidden" value="gP+sFWt9Y3r0m8U4gqqoax+tnKwIIalHVxhkC2IyoHY=">
    </div>
</form>

当jquery-ujs看到_method被删除时,它会劫持点击。它不使用GET / POST,它使用DELETE。

(关于#3:注意从link_to / button_to生成的authenticity_token。我不太了解它的详细信息)

TL:DR;开发人员使用DELETE调用来“注销”用户并不常见。只需使用GET,让您的生活更轻松。