Ruby on rails Rails-页面刷新时意外触发链接到方法(?)

Ruby on rails Rails-页面刷新时意外触发链接到方法(?),ruby-on-rails,ruby,session,routes,link-to,Ruby On Rails,Ruby,Session,Routes,Link To,我对Rails很陌生,请注意!我需要暂时使用这些版本: 轨道:3.2.18 Ruby:1.9.3-p194 每当我从link\u to按钮调用自定义方法destroy\u session时,它似乎工作正常。但是,每当我手动刷新页面时,session[:session\u token]就会被清除,就像调用了destroy\u session方法一样。。。我不知道为什么 如果我从视图中完全删除按钮,则无论我刷新浏览器多少次,会话[:session\u token]都会像预期的那样保持完整。以下是我

我对Rails很陌生,请注意!我需要暂时使用这些版本:
轨道:3.2.18
Ruby:1.9.3-p194

每当我从
link\u to
按钮调用自定义方法
destroy\u session
时,它似乎工作正常。但是,每当我手动刷新页面时,
session[:session\u token]
就会被清除,就像调用了
destroy\u session
方法一样。。。我不知道为什么


如果我从视图中完全删除
按钮,则无论我刷新浏览器多少次,
会话[:session\u token]
都会像预期的那样保持完整。以下是我当前的工作流程,需要进一步阐述:

  • 单击“获取令牌”按钮发出AJAX请求并将响应存储在
    session[:session\u Token]
  • 视图将刷新,会话令牌将按预期写入屏幕
  • 如果我在浏览器中手动点击刷新,会话令牌将消失,就像我调用了
    destroy\u session
    方法一样

查看 /app/views/search/index.html.erb


路线 /config/routes.rb


$rake路由

          searches GET    /searches(.:format)                 searches#index
                   POST   /searches(.:format)                 searches#create
        new_search GET    /searches/new(.:format)             searches#new
       edit_search GET    /searches/:id/edit(.:format)        searches#edit
            search GET    /searches/:id(.:format)             searches#show
                   PUT    /searches/:id(.:format)             searches#update
                   DELETE /searches/:id(.:format)             searches#destroy
   destroy_session        /searches/destroy_session(.:format) searches#destroy_session
          ajax_sum POST   /ajax/sum(.:format)                 my#ajax_sum
searches_get_token POST   /searches/get_token(.:format)       searches#get_token
              root        /                                   searches#index

不会引发任何错误或异常。有人能帮我找出我做错了什么吗?多谢各位

请参阅文档

方法应该是HTTP谓词,而不是方法名称。调用controllers方法来销毁会话

例如:

link_to "Some Text", :controller => :searches, :action => :destroy_session
注意,它是一个符号,不是一个方法调用。还要注意,destroy_会话需要是一个操作,而不是helper方法

最好是以任何方式命名路由(需要重新启动服务器):

并使用url帮助器:

<%= link_to 'Delete Token', action: destroy_session_path %>

您使用哪种导轨? 尝试在routes.rb中设置:

get '/searches/destroy_session' => 'searches#destroy_session'
然后

<%= link_to 'Delete Token', searches_destroy_session_path %>


也许它会有帮助

除非您明确定义路由帮助程序方法名称:
get'/searches/destroy_session'=>“searches\destroy_session',:as=>:searches\u destroy_session
谢谢您的帮助标记!我使用的是Rails:3.2.18和Ruby:1.9.3-p194,我尝试了这种方法(不管有没有Surya的建议),但得到了以下错误:ActiveRecord::RecordNotFind in SearchesController#show找不到id=destroy的搜索#会话不知何故,您被重定向到显示操作。在方法
def destroy\u session
中,尝试在
session[:session\u token]=nil之后向root添加重定向。另外,尝试删除此
helper\u方法:销毁会话
Marko,我尝试过重定向,但没有成功。destroy_会话定义似乎根本没有被调用,因此没有内联执行重定向。:/我已经更新了上面的代码以反映一些更改。。。我觉得我们越来越近了!(我还删除了helper_方法,我看不出有什么明显的效果)您可能应该在示例中添加实际的方法和控制器名称,因为OP发布了更清晰的内容。感谢Nikita的帮助!我似乎一直都遇到同样的错误:ActiveRecord::RecordNotFound in SearchesController#show找不到id=destroy的搜索_session@ndcomix:将行:
match'/searches/destroy_session'=>“searches#destroy_session”
放在
资源下面:在routes.rb中搜索
,然后重试。Surya,那一行已经在我的路由文件中了。我把它直接移到了“资源:搜索”下面(下面有几行),但不幸的是什么都没变你确定单靠
action::destroy\u session
就能工作吗?我认为只有当您使用
/searches/。
即其中一个searches控制器方法时,它才会起作用。我可能不正确,从未尝试过。如果我记得正确,如果控制器丢失,它将使用当前的控制器。嗨,BroiSatse,谢谢你的帮助!我已经尝试过您的方法,但每当我单击按钮时:不会调用destroy\u操作,并且我会被重定向到“show”视图,出现以下异常:ActiveRecord::RecordNotFound in SearchesController#show无法找到id为destroy的搜索_session@BroiSatse:这就是我第一次评论的意思,谢谢你的澄清。@BroiSatse我已经更新了上面的帖子,以反映代码的变化。我也重新启动了服务器,jic。当前,每当我尝试查看站点时,我都会遇到一个路由错误:没有路由匹配{:action=>“/searches/destroy_session”,:controller=>“searches”}我运行了$rake routes,看起来destroy_session就在那里。。。我很困惑
<%= link_to 'Delete Token', method: destroy_session %>
<%= link_to 'Delete Token', method: nil %>
<%= link_to 'Delete Token', action: :destroy_session %>
match '/searches/destroy_session' => 'searches#destroy_session', as: :destroy_session
<%= link_to 'Delete Token', action: destroy_session_path %>
get '/searches/destroy_session' => 'searches#destroy_session'
<%= link_to 'Delete Token', searches_destroy_session_path %>