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
时出现在控制台的东西)
我有一个 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
时出现在控制台的东西)