ruby-on-rails - Rails 单表继承问题

标签 ruby-on-rails types sti

我正在尝试在我的 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/

相关文章:

haskell - 组成 "length of sum"是什么意思?

java - 极少数在处理时如何表现?

sql - rails,SQL,单表继承,表地址为 "subclass"而不是类

ruby-on-rails - 如何在 Nokogiri 中创建具有属性和值的 xml 元素

ruby-on-rails - 安装特定的 Ruby 版本

ruby-on-rails - Rails 禁用编辑更新删除路线

ruby-on-rails - 运行时出错 "gem install rails"

types - 在 F# 中创建提供类型的列表

model - 如何在 Rails 中建模 "appointments"?

ruby-on-rails - 继承方法: STI? MTI?还是简单的多态关联?