我需要通过activerecord访问遗留关系数据库,该数据库使用名为“object_id”的列作为表中的主键。大多数事情都可以,但是当我尝试分别为一个关联(见下文)activerecord指定一个自定义sql查询时,ruby解释器总是从数据库中检索ruby基“object”的对象id,而不是列值。
我在has-many声明中定义了以下sql查询:
:finder_sql=>“选择*from t_object where object_id in(从t_object中选择end_object_id,从t_object.object_id={object_id}和start_object_id={object_id})
我已经试着用化名解决了这个问题:
别名属性:我的ID,:对象ID
在sql查询中使用“my oid”。但我收到了以下错误消息:
nameerror:eatobject(表不存在)的未定义的局部变量或方法“my oid”:类
我还定义了一个方法,该方法返回read_attribute(“object_id”)的值,并将方法名放入sql查询中,而不是“object_id”,但是在加载类时,我得到一条错误消息,该方法名不是数据库表中的列名。
是否有任何方法可以访问名为“object\u id”的列?

最佳答案

另一个选项是self[:object_id],但是如果您得到的是“table不存在”,那么可能还有其他问题吗?
编辑:
试试这个:

:finder_sql => 'SELECT * FROM t_object WHERE object_id IN (SELECT end_object_id FROM t_object, t_connector WHERE t_object.object_id = #{id} AND start_object_id = #{id})'

NB!单引号。

关于ruby-on-rails - 如何从ActiveRecord中名为“object_id”的列中检索值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3804691/

10-12 07:29
查看更多