我怎样才能使那个ActiveRecord无表模型成为可能?

我正在使用Ruby on Rails 3,我想对一个ActiveRecord无表模型进行初始化。

在我的模型中,我有:

class Account < ActiveRecord::Base # The following ActiveRecord Tableless Model statement is from http://codetunes.com/2008/07/20/tableless-models-in-rails/ def self.columns() @columns ||= []; end def self.column(name, sql_type = nil, default = nil, null = true) columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null) end attr_reader :id, :firstname, :lastname, def initialize(attributes = {}) @id = attributes[:id] @firstname = attributes[:firstname] @lastname = attributes[:lastname] end end 

如果在控制器中,例如在application_controller.rb文件中,我会:

 @new_account = Account.new({:id => "1", :firstname => "Test name", :lastname => "Test lastname"}) 

@new_account变量的debug \ inspect输出是

 "#" 

为什么? 我应该如何正确地使用ActiveRecord Tableless模型并使其工作?

根据该博客文章,它必须看起来像这样:

 class Account < ActiveRecord::Base class_inheritable_accessor :columns def self.columns() @columns ||= []; end def self.column(name, sql_type = nil, default = nil, null = true) columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null) end column :id, :integer column :firstname, :string column :lastname, :string end 

然后:

 @new_account = Account.new({:id => "1", :firstname => "Test name", :lastname => "Test lastname"}) 

你有没有试过这样的?

我的观点是,您不需要扩展ActiveRecord :: Base类。 您可以编写自己的模型类

 #models / letter.rb
class级信
   attr_reader:char

   def self.all
     ('A'..'Z')。map {| c | 新的(c)}
  结束

   def self.find(param)
     all.detect {| l |  l.to_param == param} || 提高(ActiveRecord的:: RecordNotFound)
  结束

   def initialize(char)
     @char = char
  结束

   def to_param
     @ char.downcase
  结束

   def产品
     Product.find(:all,:conditions => [“name LIKE?”,@ char +'%'],:order =>“name”)
  结束
结束

 #letters_controller.rb
 def指数
   @letters = Letter.all
结束

 def show
   @letter = Letter.find(params [:id])
结束

我希望它会对你有所帮助。 参考: http : //railscasts.com/episodes/121-non-active-record-model