具有手动数据库连接的ActiveRecord子类无法直接访问列变量

时间:2009-06-09 03:29:49

标签: ruby-on-rails ruby database-connection

我的一个Rails模型出现了轻微问题。这是我无法解决的事情(因为我已经这样做了),但我对实际问题很感兴趣。

基本上,我有一个名为“Events”的基于ActiveRecord的类,我使用“establish_connection”连接到远程数据库。一切正常,我甚至可以执行“Event.find(:all)”。但是,我无法使用任何便利(column_name)方法。我不得不做以下事情:

for each event in Event.find(:all)
  puts event["Point"]
  puts event["Timestamp"]
end

...而不是

for each event in Event.find(:all)
   puts event.point
   puts event.timestamp
end

仅供参考,当我生成模型时,我只运行“脚本/生成模型事件”而绝对没有别的。然后我在模型中使用“establish_connection”和“set_table”来获得连接。除此之外,我什么也没做。再次,查询工作,但我不方便访问。

想法?

最佳。

2 个答案:

答案 0 :(得分:2)

看起来你有大写问题 - 因为你的列是大写的,ActiveRecord会为你创建大写的属性。如果您执行event.Point而非event.point,则第二个示例可能会正常运行。如果您更喜欢使用小写版本,则可以使用ActiveSupport中的alias_attribute:

alias_attribute :point, :Point
alias_attribute :timestamp, :Timestamp

...等

答案 1 :(得分:0)

除了alias_attribute

如果您有权访问控制该远程数据库并可以进行更改的应用程序。

您可以使用ActiveResource,这是访问远程模型等非常干净的方式。

http://railscasts.com/episodes/94-activeresource-basics

http://railscasts.com/episodes/95-more-on-activeresource