ruby-on-rails - 如何从 ActiveRecord 中名为 "object_id"的列中检索值?

标签 ruby-on-rails ruby activerecord

我需要通过 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/

相关文章:

ruby - 以数组为根对象的葡萄路线

ruby-on-rails - 在 rails 中按日/月/年查询订单

ruby-on-rails - rails activerecord交换数据

ruby-on-rails - 邮箱:无法销毁对象

ruby-on-rails - 除了模型、 View 、 Controller 和 Assets 之外,Rails 应用程序的应用程序文件夹中可以有哪些类型的文件夹?

ruby-on-rails - 如何不将格式( json, html, xml )传递给 REST URL

ruby - 使用嵌套散列和散列作为默认值未按预期工作

ruby-on-rails - 未初始化的常量 Twitter::OAuth - 忽略某个地方的需求?

ruby-on-rails - 从 Rails 中查找 postgresql 查询 PID(跟踪查询的 ID)

ruby-on-rails - 将 Rails 部署为桌面应用程序