我只是在学习 RoR,并且正在尝试围绕我的遗留数据库构建一个模型,该模型更多地围绕 SPROC 构建用于查询数据。我找到了activerecord-tableless gem 并使用它来帮助构建模型。
到目前为止,我能够让基本模型正常工作:
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)
then w.labelImages.build
,然后我得到一个带有正确数据的 LabelImage 对象。但是,我还在控制台中收到以下消息:
Could not log "sql.active_record" event. NoMethodError: undefined method `name' for 1:Fixnum
我已经尝试挖掘源代码,但无法弄清楚这是从哪里来的。而且,我也无法弄清楚如何覆盖初始化以返回多个 LabelImage 对象的数组——因为任何给定的葡萄酒都可能有很多。我应该重写该build
方法(如果是这样,如何?),还是有另一种方法来创建对象,然后将它们分配给 Wine.labelImages 属性?