Ruby on rails 是否有内置的方法从数据库中获取单个ActiveRecord属性(忽略内存中的值)?

Ruby on rails 是否有内置的方法从数据库中获取单个ActiveRecord属性(忽略内存中的值)?,ruby-on-rails,ruby,activerecord,ruby-on-rails-2,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 2,大警告:我们公司正在使用Rails 2。所以我正在从ActiveRecord2中寻找答案(如果有的话) ActiveRecord中是否已包含从数据库中获取属性的最新值的方法,而无需调用reload或覆盖当前内存中的值 例如: p = Person.find(123) # Now the in-memory value is "Joe", which would be overwritten # if I called reload p.nickname = "Joe" # I want so

大警告:我们公司正在使用Rails 2。所以我正在从ActiveRecord2中寻找答案(如果有的话)

ActiveRecord中是否已包含从数据库中获取属性的最新值的方法,而无需调用
reload
或覆盖当前内存中的值

例如:

p = Person.find(123)

# Now the in-memory value is "Joe", which would be overwritten
# if I called reload
p.nickname = "Joe"

# I want something like this to execute the equivalent of:
# SELECT 'nickname' FROM persons WHERE id = 123;
nickname_from_db = p.get_current_value(:nickname)

我意识到我所要求的将是非常简单的实现自己;如果已经有一个ActiveRecord方法可以满足我的要求,我只是不想重新发明轮子。

您可以访问脏属性来获取属性的上一个值

>> p = Product.first
>> p.name # foo
>> p.name = 'bar'
>> p.changes['name'] # ['foo', 'bar']

您可以使用
选择
选项


Person.find(123,:select=>“昵称”)

这很好,但我想现在获取数据库中当前的值,而不是我第一次获取记录时的值。这有意义吗?我真的不明白。如果您需要知道数据库中当前的值,只需使用acitve record执行另一个数据库查询即可@本杰明:当然可以;我问这个问题是因为,众所周知,ActiveRecord和Rails中通常有很多方便的方法;所以,我并没有写我自己的小助手函数来做这件事(就像Kaeros的回答一样),我只是先检查它是否已经存在。。。那么就没有“直接”方法了?(我想我只是想澄清,没有,例如,一个实例方法包装这个。)Person.find(p,:select=>:昵称)No.
昵称
只是一个值,Rails不知道它来自何处。因此,您必须询问获取当前值的来源:
Person
@BenjaminM:我不是指
String
上的实例方法,而是指
Person
。例如,如果我有一个
Person
对象,
p
,我想可能会有一个类似
p.fetch\u latest(“昵称”)
的方法,该方法会在内部调用
Person.find(p.id,:select=>“昵称”)
。不管怎样,我猜没有这样的方法;所以我会按照这个答案的建议去做。