我需要通过 ActiveRecord 访问遗留关系数据库,该数据库使用名为“object_id”的列作为表中的主键。大多数事情都有效,但是当我尝试分别为关联指定自定义 SQL 查询(见下文)ActiveRecord 时,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: undefined local variable or method `my_oid' for EaTObject(Table doesn't exist):Class
我还定义了一个方法,该方法返回 read_attribute("object_id") 的值,并将方法名称而不是“object_id”放入 SQL 查询中,但是当加载类时,我收到错误消息,指出该方法名称不是数据库表中的列名。
是否有任何解决方案来访问名为“object_id”的列?
最佳答案
你可以使用这个方法:
read_attribute(:object_id)
文档中的链接:
http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Read.html#method-i-read_attribute
因此,如果您想在调用 oid 时访问 object_id 列,则需要删除别名并定义 oid 方法
def oid
read_attribute(:object_id)
end
关于ruby-on-rails - 如何从 ActiveRecord 中名为 "object_id"的列中检索值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3804691/