【发布时间】:2013-01-31 14:02:55
【问题描述】:
我是 Ruby 和 ActiveRecord 的新手,所以如果这是一个愚蠢的问题......对不起。
我有一个 Postgres 数据库表,其中包含路径名。我需要在特定路径上进行查找并获取 OID(该表定义为:set_default_oids = true)。问题是我可以添加一个 select("oid,path") 但我从来没有得到 OID。我确实得到了路径,但我需要 OID。
我假设有一些适配器选项或表类选项说:使用 OID,但我找不到它。
当我查看查找结果时,我可以查看 object_id,但这似乎是 ActiveRecord 内部的东西,与 OID 无关。使用 psql 时,我可以这样做:
db=# SELECT oid,path FROM path_table;
我看到了正确的 OID。所以我知道他们在那里......
有什么建议吗?
罗伯
【问题讨论】:
-
如果您在 Rails 控制台中查看
Model.columns.map(&:name),它是否提到了oid列?如果你这样做Model.select('oid').map(&:oid)会发生什么?Model我的意思是无论你的表的模型包装器被称为什么。 -
我刚刚发现我可以使用 connection.execute() 并得到它,但我仍然想看看是否有办法设置类或连接,这样我就不会必须使用“原始”连接。
-
我试过了: PathTable.select("oid,path").where("path = '/data/tables/2008/05/13'").map(&:oid) 得到了:“17341”是正确的 OID,但它似乎忽略了选择的“路径”部分。
-
并且,回答您的其他问题:如果我执行 PathTable.columns.map(&:name),则不会列出 oid。
-
也许使用简单的
SERIAL字段而不是内部的oids 会更好?
标签: ruby postgresql activerecord