我正在尝试在我的 Rails 应用程序中为 User 模型及其子类 Member、Subscriber 和 Staff 设置单表继承。
我每个都有一个模型文件:user.rb、member.rb 等
定义用户模型:class User < ActiveRecord::Base; end;
我将其他模型子类化为:class Member < User; end;
等等。
在我的用户表中,我拥有每个类(class)需要的所有字段以及类型字段。现在,当我转到控制台并尝试创建 say 成员或订阅者的新实例时,出现以下错误:TypeError: can't dup NilClass
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2184:in 'dup'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2184:in 'scoped_methods'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2188:in 'current_scoped_methods'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2171:in 'scoped?'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2439:in 'send'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2439:in 'initialize'
from (irb):6:in 'new'
from (irb):6
Rails 知道子类模型在那里,因为在控制台中,当我简单地调用 Member 或 Subscriber 时,我会得到返回的类定义。
我已经阅读了简单的文档,但我一定遗漏了什么?
最佳答案
我从头开始的应用程序开始尝试在我身边并且它有效
这是我的用户模型(User.rb)
class User < ActiveRecord::Base
end
我的成员(member)模型 (Member.rb)
class Member < User
end
我有一个迁移文件来创建我的用户表,其中包含:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :name
t.timestamps
end
end
def self.down
drop_table :users
end
end
现在启动控制台:
➜ ./script/console
Loading development environment (Rails 2.3.4)
>> u = User.new
=> #<User id: nil, name: nil, created_at: nil, updated_at: nil>
>> m = Member.new
=> #<Member id: nil, name: nil, created_at: nil, updated_at: nil>
>> m.name="hop"
=> "hop"
>> m.save
=> true
但是我没有设法重现您的错误:(
关于ruby-on-rails - Rails 单表继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1579051/