无法从ActiveRecord.find返回的对象中读取值

时间:2010-03-27 17:13:21

标签: ruby-on-rails activerecord find

我对DB进行以下调用。

@patientRegistration = PatientRegistration.find(:all, 
                         :conditions=>["name = '#{patientName}'"])

这将根据给定名称搜索患者注册。我得到一个有效的@patientRegistration对象。当我调用@patientRegistration.inspect时,它会正确打印数据库中对象的所有值。

但是当我尝试通过执行以下操作来读取特定属性(比如id或name)时:@patientRegistration.id@patientRegistration.name,我得到的值无效。它的空白或一些垃圾值。我不明白检查如何正确检索所有值,但读取单个属性会产生无效值。

由于

1 个答案:

答案 0 :(得分:3)

find(:all)返回与条件匹配的所有记录的数组(inspect可能会在方括号中显示结果)。 @patientRegistration.first.name将返回数组中第一条记录的名称。但是,如果您只对符合条件的第一条记录或唯一记录感兴趣,则可以使用find(:first)代替:

@patientRegistration = PatientRegistration.find(:first, 
                         :conditions => ["name = ?", patientName])

请注意,我还更改了您的条件以使用参数,以便它不再受SQL注入攻击的威胁。

您还可以使用基于属性的查找器重写此代码:

@patientRegistration = PatientRegistration.find_by_name(patientName)

这将执行find(:first)。相当于find(:all),请使用find_all_by代替find_by