路由会话#destroy action
我正在链接到Sessions控制器的destroy动作,如下所示:
routes.rb中:
resources :sessions, only: [:new, :create, :destroy]
Rails抱怨上面的链接:
没有路由匹配{:action =>“destroy”,:controller =>“sessions”}缺少必需的密钥:[:id]
当没有对象ID提供链接时,如何链接到destroy操作并在Rails中保留REST /资源方法?
最好将会话控制器的路由视为单一资源
的routes.rb
resource :sessions
Doc: http : //guides.rubyonrails.org/routing.html#singular-resources
这将为您提供一条无需ID即可使用的路线
DELETE / sessions sessions#destroy
destroy
是一个成员路由,你需要在params中传递id
以使其工作,但你可以这样做将它转换为一个收集路由
resources :sessions, only: [:new, :create] do delete :destroy, on: :collection end
希望有所帮助!
默认情况下,destroy方法需要id,应该通过链接传递。 对于Ex。 你正在销毁登录用户的会话,然后你必须传递登录用户的id
或session
,在这种情况下,你的链接应该像这样, <%= link_to "Sign out", session_path(user.id), method: :delete %>
或者如果你的目的只是删除/清除会话,那么你需要改变路线。
resources :sessions, only: [:new, :create] delete '/session', to: 'sessions#destroy'
如果你想要两种类型的链接(我们可以在其中传递ID),那么你应该试试这条路线。 delete '/session(/:id)', to: 'sessions#destroy'
您需要将会话资源传递给该路由,如下所示:
<%= link_to "Sign out", session_path(session), method: :delete %>
Rails显示和删除操作需要资源。
您需要更改路径,在您的情况下,可以是/users/sign_out
或sessions/sign_out
而不是使用DELETE
方法的/sessions
。
看看设计的会话破坏行为和路线。
所以,你可以使用类似的东西
resource :session do delete :destroy, path: 'sign_out', as: "destroy" end
这将创建指向sessions#destroy
path /session/sign_out
,您可以在视图中将其作为destroy_session_path
。