2010-10-19 10 views
1

Possible en double:
Rails - Cannot dup NilClass when using Single Table InheritanceImpossible dup NilClass lors de la création d'un modèle enfant à l'aide unique Héritage de Table

Salut les gars,

J'utilise Rails 2.3.8 et Ruby 1.8.7 sous Windows (oui je sais que je devrais utiliser linux ... je n'ai pas le temps de le faire maintenant = P)

J'essaie de faire un simple modèle d'IST.

Où j'ai un utilisateur de classe et 1 sous-classe (BusinessContact) héritant de l'utilisateur.

Je peux appeler User.new, User.create et il ne s'enregistré dans le DB, mais lorsque je tente BusinessContact.new ou .Create je reçois:

can't dup NilClass 

D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2219:in `dup' 
D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2219:in `scoped_methods' 
D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2223:in `current_scoped_methods' 
D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2206:in `scoped?' 
D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2474:in `send' 
D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2474:in `initialize' 
D:/Users/Administrator/Projects/Addcamon/src/app/controllers/debug_controller.rb:3:in `new' 
D:/Users/Administrator/Projects/Addcamon/src/app/controllers/debug_controller.rb:3:in `index' 

La migration de l'utilisateur est créé comme suit :

# Create Users Table 
    create_table :users do |t| 
     t.string :type 

     # common attributes 
     t.string :login, :limit => 40 
     t.string :identity_url  
     t.string :name, :limit => 100, :default => '', :null => true 
     t.string :email, :limit => 100 
     t.string :crypted_password, :limit => 40 
     t.string :salt, :limit => 40 
     t.string :remember_token, :limit => 40 
     t.string :activation_code, :limit => 40 
     t.string :state, :null => :false, :default => 'passive'  
     t.datetime :remember_token_expires_at 
     t.string :password_reset_code, :default => nil 
     t.datetime :activated_at 
     t.datetime :deleted_at 
     t.timestamps 
    end 

Et mes modèles sont définis comme ceci:

class User < ActiveRecord::Base 
    unloadable #I've added this cause I read somewhere it could fix the problem, but it didn't 
    include Authentication 
    include Authentication::ByPassword 
    include Authentication::ByCookieToken 
    include Authorization::AasmRoles 

    # Validations 
    validates_presence_of :login, :if => :not_using_openid? 
    validates_length_of :login, :within => 3..40, :if => :not_using_openid? 
    validates_uniqueness_of :login, :case_sensitive => false, :if => :not_using_openid? 
    validates_format_of :login, :with => RE_LOGIN_OK, :message => MSG_LOGIN_BAD, :if => :not_using_openid? 
    validates_format_of :name, :with => RE_NAME_OK, :message => MSG_NAME_BAD, :allow_nil => true 
    validates_length_of :name, :maximum => 100 
    validates_presence_of :email, :if => :not_using_openid? 
    validates_length_of :email, :within => 6..100, :if => :not_using_openid? 
    validates_uniqueness_of :email, :case_sensitive => false, :if => :not_using_openid? 
    validates_format_of :email, :with => RE_EMAIL_OK, :message => MSG_EMAIL_BAD, :if => :not_using_openid? 
    validates_uniqueness_of :identity_url, :unless => :not_using_openid? 
    validate :normalize_identity_url 
end 

class BusinessContact < User 

end 

I'v e déjà essayé la solution unloadable je l'ai vu quelque part

J'ai essayé via la console de rails, pas de chance non plus:

user = BusinessContact.new 
TypeError: can't dup NilClass 
     from D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2219:in `dup' 
     from D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2219:in `scoped_methods' 
     from D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2223:in `current_scoped_methods' 
     from D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2206:in `scoped?' 
     from D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2474:in `send' 
     from D:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2474:in `initialize' 
     from (irb):9:in `new' 
     from (irb):9 
+0

Il semble que quelqu'un ait posté deux fois la même question, deux utilisateurs différents ... [Rails - Impossible de dupliquer NilClass lors de l'utilisation de Single Table Inheritance] (http://stackoverflow.com/questions/3971496/rails-cannot- dup-nilclass-when-using-single-table-inheritance) –

+0

C'est mon utilisateur de coworker, je ne savais pas qu'il allait demander ici. Si c'est un problème, supprimez l'une des questions. – emzero

Répondre

0

Êtes-vous en train de définir la classe BusinessContact à l'intérieur user.rb? Si oui, essayez de passer à business_contact.rb et voir si cela aide.

+0

Non, BusinessConact est défini comme un nouveau modèle de rails – emzero