Ruby on rails 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]都会像预期的那样保持完整。以下是我
轨道: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 %>