我正在学习RoR,并且正在尝试围绕我的遗留数据库构建一个模型,该数据库是围绕SPROC构建的,用于查询数据。我找到了activerecord-tableless宝石并使用它来帮助构建模型。
到目前为止,我能够让基本模型运行正常:
class Wine < ActiveRecord::Base
has_no_table
self.primary_key = "iWine"
column :iWine, :integer
column :Wine, :string
column :Vintage, :integer
....etc......
attr_accessible :iWine, :Wine, :Vintage, .....
has_many :labelImages
def self.find_wine(id)
r = ActiveRecord::Base.execute_procedure "sp_FetchWineVerbose", 'iWine' => id.to_i
if r.size > 0
w = Wine.new(r[0])
return w;
end
end
end
现在,我想利用ActiveRecord的关联来提取其他相关数据,例如:标签图片,其他年份等。这是我到目前为止:
class LabelImage < ActiveRecord::Base
has_no_table
column :id, :integer
column :width, :integer
column :height, :integer
column :wine_id, :integer
attr_accessible :id, :width, :height, :wine_id
after_initialize :fetch_data
belongs_to :wine
def fetch_data()
sql = <<-eos
SELECT iLabel AS id, Width AS width, Height AS height, ....
eos
r = ActiveRecord::Base.connection.select_all(sql, 'Label Image', [[wine_id,wine_id]])
if r.size > 0
self.assign_attributes(r[0])
end
end
end
所以,现在,我可以调用w = Wine.find_wine(1)
然后调用w.labelImages.build
,然后使用正确的数据返回LabelImage对象。但是,我也在控制台中收到以下消息:
Could not log "sql.active_record" event. NoMethodError: undefined method `name' for 1:Fixnum
我尝试过挖掘源代码,但无法弄清楚这是从哪里来的。而且,我也无法弄清楚如何覆盖初始化以返回多个LabelImage对象的数组 - 因为任何给定的葡萄酒可能有很多。我应该覆盖build
方法(如果是,如何?),还是有另一种方法来创建对象,然后将它们分配给Wine.labelImages属性?
答案 0 :(得分:1)
您可能正在努力解决这个问题,activerecord-tableless
gem实际上是用于未存储在SQL数据库中的信息。
我建议您查看https://rubygems.org/gems/rmre
之类的内容,以帮助您根据现有架构构建active_model。