Невозможно прочитать значения из объекта, возвращенного из ActiveRecord.find - PullRequest
0 голосов
/ 27 марта 2010

Я делаю следующий вызов в БД.

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

Выполняет поиск регистрации пациента на основе заданного имени. Я получаю действительный @patientRegistration объект. Когда я вызываю @patientRegistration.inspect, он правильно печатает все значения для объекта в БД.

Но когда я пытаюсь прочитать определенный атрибут (скажем, идентификатор или имя), выполнив следующее: @patientRegistration.id или @patientRegistration.name, я получаю недопустимые значения. Либо его пустые, либо некоторые ненужные значения. Я не понимаю, как inspect может правильно извлечь все значения, но чтение отдельных атрибутов дает недопустимые значения.

Спасибо

1 Ответ

3 голосов
/ 27 марта 2010

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_<em>all</em>_by вместо find_by.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...