Rails - 删除路由去销毁动作

Rails - delete route goes to destroy action

我有一个 Passenger 和 Driver 模型及其相应的控制器(我无法设置 sessions 控制器来封装它们的登录和注销)。我试图在注销时删除 session 但用于注销的 link 进入销毁操作,因为它有一个删除方法,但我希望它在乘客控制器中进行注销操作,因为destroy 动作是为了摧毁乘客,而不是它的 session。

这是 rails 错误:

Missing template passengers/destroy, application/destroy with {:locale=>[:en], :formats=
>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. 
Searched in: * "/Users/hamed/Coding/BikeMe/app/views"

这是我的乘客路线(我也有一份相同的司机代码):

resources :passengers do
  get '/dashboard' => 'passengers#dashboard'
end

post '/passengers/login'   => 'passengers#login'
delete '/passengers/logout'  => 'passengers#logout'

这是 link:

<a class="btn btn-primary" data-method="delete" href="/passengers/logout">Logout as 
passenger</a>

这是 passengers_controller 中的操作:

def login
  @passenger = Passenger.find_by_email(params[:passenger][:email])
  if @passenger && @passenger.authenticate(params[:passenger][:password])
    session[:passenger_id] = @passenger.id
    render :dashboard
  else
    redirect_to '/passengers/new', :notice => "Invalid login. Try again"
  end
end

def logout
  session[:passenger_id].clear
  redirect_to '/passengers/login'
end

def destroy
end

首先,您所描述的内容确实让人觉得使用两个独立的控制器会更好。甚至你描述它的方式,你必须使用两个不同的名词("delete the session" 与 "destroy the passenger");考虑是否可以将与会话相关的操作移出该控制器。我认为这样会更明智。

除此之外,我没有发现您的代码中存在任何直接问题。值得一问,你重启了所有相关服务了吗?我经常做一些小的改变,当我没有看到它反映在浏览器中时吓坏了,然后意识到我必须 touch tmp/restart 或其他东西(取决于你的网络服务器)。

您正在加载什么 URL 以获取粘贴在顶部的错误消息?您可以粘贴该 URL 请求的日志或控制台输出吗? (当你 运行 rails s 时出现在控制台的东西)