我感到困惑的是为什么我不能引用对象的属性;希望有人能帮忙......
我需要构建一个哈希,它将Marker.marker_name与数据库中的id相关联,这些ID已经存储(记录ID将作为另一个表中的外键)。
所以,首先我通过这个命名的范围检索标记记录:
class Marker < ActiveRecord::Base
named_scope :by_name, lambda { |marker_name|
{:conditions => ["marker_name = ?", marker_name]}}
从我的上传模型中调用,就像这样(marker_name的值为“Amelogenin”):
this_marker = Marker.by_name(marker_name)
我知道这很有效,因为当我使用调试器时,我可以看到this_marker中的内容,如下所示:
(rdb:2)y this_marker
- !ruby / object:标记属性: created_at:2011-03-14 22:21:27.244885 updated_at:2011-03-14 22:21:27.244885 id:“11” marker_name:Amelogenin attributes_cache:{}
然而,我无法在哈希中分配记录ID,如下所示:
$markers[marker_name] = this_marker.id
我似乎无法以这种方式直接引用id;因为,即使在调试器中,我也会收到此错误:
(rdb:2) p this_marker.id
(__DELEGATION__):2: warning: Object#id will be deprecated; use Object#object_id
我需要使用某种不同的Ruby语法或者什么?如何将marker_name与其记录ID相关联?
提前致谢....
答案 0 :(得分:0)
是一个非常令人困惑的错误消息,(我敢打赌这也是一个相当普遍的问题)。
Marker.by_name(marker_name)
不返回活动记录对象,但是没有活动记录ID的范围只有Object#id
方法,该方法已被弃用(并且已经在Ruby 1.9.2中使用)
范围是懒惰的 - 在您尝试使用它们之前它们不会访问数据库(或打印它们,就像您的情况一样)。
尝试Marker.by_name(marker_name).first
答案 1 :(得分:0)
当在非ActiveRecord对象上调用id
方法时会发生此类错误。因此,请确保this_marker
是AR对象实例。
this_marker = Marker.by_name(marker_name)
你确定这会返回一个Marker对象吗?没有致电all
或first
。
答案 2 :(得分:0)
此Marker.by_name(marker_name)
会返回array
个制作者。你应该写:
this_marker = Marker.by_name(marker_name).first