2010-03-27 73 views
0

我對數據庫進行了以下調用。無法讀取從ActiveRecord.find返回的對象的值

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

這會根據給定的名稱搜索患者註冊。我得到一個有效的@patientRegistration對象。當我調用@patientRegistration.inspect時,它會正確打印DB中對象的所有值。

但是,當我嘗試通過執行以下操作來讀取特定屬性(說id或名稱):@patientRegistration.id@patientRegistration.name,我會得到無效值。它的空白或一些垃圾值。我不明白如何檢查能夠正確檢索所有值,但閱讀個別屬性會給出無效值。

感謝

回答

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

+0

它的工作原理。大!。謝謝 – Venki 2010-03-27 17:44:15