设计"< #User未初始化>"错误

时间:2014-03-22 15:05:44

标签: ruby-on-rails ruby devise

我已经在预先存在的“用户”模型中集成了设计。这就是它的样子

User.rb

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

include AstroModels::Users::Validation

当我浏览任何身份验证页面时。我得到以下错误

ActionView::Template::Error (undefined method `[]' for nil:NilClass):

我使用&lt;%resource.inspect%&gt;进行了调试。 ,我得到以下错误,

<#User not initialized>

在以下一行

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>

此外,我通过更改

尝试了堆栈溢出答案
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>

**<%= form_for(resource_name, :as => resource, :url => session_path(resource_name)) do |f| %>**

但似乎没有用。仅供参考,我正在将设备集成到使用rails4的应用程序中。

我的应用程序助手文件中有更多iinfor。

  def resource_name
    :user    
  end

  def resource

  @resource ||= User.new
  end

 def devise_mapping
  @devise_mapping ||= Devise.mappings[:user]
 end

任何建议/解决方法都非常有用,谢谢。

2 个答案:

答案 0 :(得分:2)

在我的情况下,我继承了我的自定义用户模型与ActiveRecord :: Base类和ActiveRecord :: Base,当我们继承任何类时,我们不能在该自定义模型中拥有自己的初始化方法。所以我在自定义模型中注释掉了初始化方法,错误消失了。

希望它会对你有所帮助。

答案 1 :(得分:0)

您没有提及routes.rb或创建会话所需的视图,这会初始化用户。你完成了那些任务吗?您应该从Devise安装生成器开始添加代码,包括初始化器:

rails generate devise:install

routes.rb必须包含为您的应用程序设置的devise_for。一个例子,不一定适合您:

Sampleapp::Application.routes.draw do
  root :to => "home#index"
  devise_for :users, :controllers => {:registrations => "registrations"}
  resources :users
end

您可以访问Devise gem中的视图,也可以将它们复制到您自己的应用程序中,以便可以像这样自定义:

rails generate devise:views  

这将提供app / views / devise视图以及登录和创建会话所需的app / views / layouts。