我怎样才能使那个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