Rails - 删除路由去破坏行动

时间:2015-04-30 20:35:13

标签: ruby-on-rails session routes action

我有一个Passenger and Driver模型及其相应的控制器(我无法设置会话控制器来封装他们的登录和注销)。我正在尝试在注销时删除会话,但是注销的链接转到了destroy操作,因为它有一个删除方法,但我希望它在乘客控制器中执行注销操作,因为销毁操作是为了摧毁乘客而不是它的会话。

继承轨道错误:

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'

继承人的链接:

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

以下是对乘客控制器的行动:

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

1 个答案:

答案 0 :(得分:1)

首先,你所描述的内容确实让你觉得两个独立的控制器会更好。即使你描述它的方式,你必须使用两个不同的名词(“删除会话”与“摧毁乘客”);考虑是否可以将与会话相关的操作移出此控制器。我认为这样会更安全。

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

为了获取您在顶部粘贴的错误消息,您加载了哪些网址?您可以粘贴该URL请求的日志或控制台输出吗? (运行rails s时)控制台中显示的内容