用于#<actionview :: base的未定义方法`user_sessions_path':0xdb3158> </actionview :: base:0xdb3158>

时间:2009-10-20 16:34:09

标签: ruby-on-rails

我收到这个错误,这让我感到困惑。我不知道发生了什么......我已按照T的说明进行操作,但仍在抱怨 - 请帮助!我有错误消息,控制器文件,登录页面和路由文件的摘录。

错误消息

NoMethodError in User_sessions#new
Showing app/views/user_sessions/new.html.erb where line #4 raised:
undefined method `user_sessions_path' for #<ActionView::Base:0x1fe766f>

提取的来源(第4行):

的应用程序/视图/用户/ login.rhtml

4. <% form_for @user_session do |f| %>
5.  <%= f.error_messages %>

控制器/ user_sessions_controller.rb

class UserSessionsController < ApplicationController
  before_filter :require_no_user, :only => [:new, :create]
  before_filter :require_user, :only => :destroy

  def new
    @user_session = UserSession.new
  end

  def create
    @user_session = UserSession.new(params[:user_session])
    if @user_session.save
      flash[:notice] = "Login successful!"
      redirect_to root_url
      #redirect_back_or_default account_url
    else
      render :action => :new
    end
  end

  def destroy
    current_user_session.destroy
    flash[:notice] = "Logout successful!"
    redirect_to root_url
    #redirect_back_or_default account_url
  end
end

user_sessions / new.html.erb

#User Login

<% form_for @user_session do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :Email %><br />
    <%= f.text_field :email %>
  </p>
  <p>
    <%= f.label :Password %><br />
    <%= f.password_field :password %>
  </p>
  <p>
    <%= f.submit "Submit" %>
  </p>
<% end %>

routes.rb文件

ActionController::Routing::Routes.draw do |map|
  map.login "login", :controller => "user_sessions", :action => "new"

我在错误的地方看看吗?

2 个答案:

答案 0 :(得分:6)

问题是您的路线文件。你不是在休息。因此<%form_for @user_session%>将不知道如何创建网址。

map.resource: user_session添加到routes.rb可以解决您的问题。

您应该阅读restful_authentication plugin's documentation.

答案 1 :(得分:1)

这看起来像是一个形式上的错误。 我在路由map.resource:user_session。

中遇到了同样的错误

Formtastic应该发布到单数路由名称,而不是复数,因为user_session是一个单一的资源。