【发布时间】:2011-04-17 19:25:32
【问题描述】:
我需要通过 ActiveRecord 访问旧的关系数据库,并且该数据库使用名为“object_id”的列作为表中的主键。大多数事情都有效,但是当我尝试分别为关联(见下文)ActiveRecord 指定自定义 SQL 查询时,Ruby 解释器总是检索 Ruby 基础“对象”的 object_id 而不是数据库中的列值。
我在 has_many 声明中定义了以下 SQL 查询:
:finder_sql => "SELECT * FROM t_object WHERE object_id IN (SELECT end_object_id FROM t_object, t_connector WHERE t_object.object_id = #{object_id} AND start_object_id = #{object_id})
我已经尝试通过使用别名来解决它:
alias_attribute :my_oid, :object_id
并在 SQL 查询中使用“my_oid”。但我收到以下错误消息:
NameError: EaTObject 的未定义局部变量或方法“my_oid”(表不存在):类
我还定义了一个方法,它返回 read_attribute("object_id") 的值并将方法名称而不是 "object_id" 放入 SQL 查询中,但是当加载类时,我收到错误消息,该方法名称不是数据库表中的列名。
有没有办法访问名为“object_id”的列?
【问题讨论】:
标签: ruby-on-rails ruby activerecord