0

我只是在学习 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 属性?

4

1 回答 1

1

您可能会遇到困难,activerecord-tablelessgem 实际上是用于未存储在 SQL 数据库中的信息。

我建议查看类似的东西https://rubygems.org/gems/rmre可以帮助基于您现有的模式构建 active_models。

于 2013-03-15T19:06:43.130 回答