我对Rails很新,抬头!我暂时要求使用这些版本:
导轨:3.2.18
Ruby:1.9.3-p194
每当我从destroy_session
按钮调用自定义方法link_to
时,它似乎工作正常。但是,无论何时我手动刷新页面session[:session_token]
都被清除,就像调用destroy_session
方法一样......我不确定为什么?
如果我从视图中完全删除了<link_to>
按钮,则无论我刷新浏览器多少次,session[:session_token]
都会保持原样。以下是我目前要进一步阐述的工作流程:
session[:session_token]
destroy_session
方法一样。
查看
/app/views/searches/index.html.erb
<%= link_to 'Delete Token', action: destroy_session_path %>
的控制器
/app/controllers/searches_controller.rb
helper_method :destroy_session
def destroy_session
session[:session_token] = nil
end
的路线
/config/routes.rb
resources :searches
match '/searches/destroy_session' => 'searches#destroy_session', :as => :destroy_session
post '/searches/get_token' => 'searches#get_token'
root :to => 'searches#index'
$ rake routes
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
不会抛出任何错误或异常。有人请帮助我确定我在这里做错了什么吗?非常感谢你!
答案 0 :(得分:0)
请参阅link_to
文档。
方法应该是HTTP谓词,而不是方法名称。调用控制器方法来销毁会话。
示例:
link_to "Some Text", :controller => :searches, :action => :destroy_session
答案 1 :(得分:0)
<%= link_to 'Delete Token', method: destroy_session %>
当红宝石正在读这行时,它将显示为:
<%= link_to 'Delete Token', method: nil %>
因为你在这里执行destroy_session
方法,这自然会破坏会话。你的意思是:
<%= link_to 'Delete Token', action: :destroy_session %>
注意它是符号,而不是方法调用。另请注意,destroy_session需要是一个动作,而不是辅助方法。
如果您为路由命名(需要重启服务器),那将是最好的:
match '/searches/destroy_session' => 'searches#destroy_session', as: :destroy_session
并使用url helper:
<%= link_to 'Delete Token', action: destroy_session_path %>
答案 2 :(得分:0)
get '/searches/destroy_session' => 'searches#destroy_session'
然后
<%= link_to 'Delete Token', searches_destroy_session_path %>
也许会有所帮助