【问题标题】:NameError in Sessions#new会话中的名称错误#new
【发布时间】:2011-07-28 03:24:25
【问题描述】:

我得到 this error: undefined local variable or methodsessions_path' 为 #when I go tolocalhost:3000/login` 看到代码与以前的应用程序,它确实有效。

这里是相关文件的代码。


routes.rb

get 'register' => 'users#new', :as => 'register'
get 'login' => 'sessions#new', :as => 'login'
get 'logout' => 'sessions#destroy', :as => 'logout' 

resources :users, :path => '/'

root :to => 'users#index' 
match '/:id' => 'users#show' 


sessions_controller.rb

class SessionsController < ApplicationController
def new
end

def create
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password])
        session[:user_id] = user.id
        redirect_to root_url, :notice => 'Logged in!'
    else
        flash.now.alert = 'Invalid email or password'
        render 'new'
    end
end

def destroy
    session[:user_id] = nil
    redirect_to root_url, :notice => 'Logged out!'
end
end


views/sessions/new.html.erb

<h1>Log in</h1>

<%= form_tag sessions_path do %>
<div class="field"></div>
    <%= label_tag :email %>
    <%= text_field_tag :email, params[:email] %>
</div>
<div class="field"></div>
    <%= label_tag :password %>
    <%= text_field_tag :password %>
</div>
<div class="actions"><%= submit_tag "Log in"%></div>
<% end %>

【问题讨论】:

  • 完整的错误说明了什么? “NameError”没有帮助,但至少堆栈跟踪可以为出错的地方提供有用的上下文。
  • 请添加完整的堆栈跟踪。
  • 对不起!我添加了整个错误描述的代码和屏幕截图。
  • 尝试将资源 :sessions 添加到您的路线中
  • 大声笑,这几乎解决了它!添加一个答案,以便我批准您的答案以关闭此问题 :)

标签: ruby-on-rails


【解决方案1】:

您没有定义sessions_path - 使用rake routes 进行验证。要使用 sessions_path 方法,您需要在路由规范中包含 resources :sessions

关于你的SessionsController,你的路由文件应该看起来像......

resources :sessions, :only => [:create]
get 'register' => 'users#new', :as => 'register'
get 'login' => 'sessions#new', :as => 'login'
get 'logout' => 'sessions#destroy', :as => 'logout' 

resources :users, :path => '/'

root :to => 'users#index' 
match '/:id' => 'users#show'

【讨论】:

  • 已编辑:仅缺少创建操作
  • 是的,彼得安徒生在上面解决了它,我告诉他回答这样他就可以得到分数但是哦,好吧:P
  • 为什么是“资源”?就会话而言,我们从不一次处理一系列会话,我们从不在索引或类似的东西中列出会话?
  • resource sessions 也可以。但是,当您使用 session_path 而不是 sessions_path 时,您必须注意复数形式
猜你喜欢
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
相关资源
最近更新 更多