2009-07-18 6 views
0

Я предпринимаю довольно большое преобразование из устаревшего приложения Windows, управляемого базой данных, в приложение Rails. Из-за большого количества форм и таблиц базы данных, я хочу убедиться, что у меня есть правильная методология, прежде чем зайти слишком далеко.Методология для Rails-приложения

Основная забота сводится к минимуму количества кода, который я должен написать. Есть много моделей, которые взаимодействуют друг с другом, и я хочу убедиться, что правильно их использую. Вот упрощенный набор моделей:

класс пациент < ActiveRecord :: Base has_many: PatientAddresses has_many: PatientFileStatuses конца

класса PatientAddress < ActiveRecord :: Base belongs_to: Пациент конца

класса PatientFileStatus < ActiveRecord :: Base принадлежит_to: Пациент конец

Контроллер определяет, выбран ли пациент; все остальное на этом основано.

В представлении мне понадобятся данные из каждой из этих моделей. Но мне кажется, что я должен написать переменную экземпляра в моем контроллере для каждого атрибута, который я хочу использовать. Поэтому я начинаю писать код, как это:

@patient = Patient.find (сессия [: пациент]) @patient_addresses = @ patient.PatientAddresses @patient_file_statuses = @ patient.PatientFileStatuses

@enrollment_received_when = @patient_file_statuses [0] .EnrollmentReceivedWhen @consent_received = @patient_file_statuses [0] .ConsentReceived @consent_received_when = @patient_file_statuses [0] .ConsentReceivedWhen

первые три строки захватить модель пациента и его отношения. Следующие три строки являются примерами моих значений для представления из одного из этих отношений.

Вид имеет комбинацию текстовых полей и полей для отображения приведенных выше данных. Например:

"знач1", "знач2" => "знач2", "Автор" => "Автор"},: include_blank => верно)%> : сила%>

(BTV, избранных тег не действительно работает, я думаю, что я должен использовать collection_select)

Мои вопросы:

  1. ли я вручную объявить значение каждой переменной экземпляра в контроллере, или может/должен? Я делаю это во взгляде?
  2. Какова надлежащая методика отображения тега select для данных, которые не являются основной моделью?
  3. Когда я перехожу к сохранению изменений в этой форме, мне придется вручную выбирать атрибуты для каждой модели и сохранять их отдельно? Или есть способ назвать поля, которые ActiveRecord делает правильно?

Заранее благодарен, Аарон.

+0

Что такое обозначение корпуса верблюда в ваших ассоциациях? –

ответ

0

1) Нет ничего, что помешало бы вам написать произвольный код Ruby в представлении, поэтому вы можете просто написать @patient.PatientAddresses вместо определения @patient_addresses в контроллере. Это всего лишь котельная плита, и очень легко рефакторинг с поиском/заменой, если вы хотите изменить ее позже. Ото я бы поставил линию

@patient = Patient.find(session[:patient])

в контроллере, так как вы только хотите, чтобы выполнить просмотровые один раз, и запрос может также измениться.

3) Метод save в ActiveRecord немного тонкий. В общем случае он сохранит только объект, по которому вы вызываете метод , а также любые зависимости. Возможно, не удастся сохранить только одну строку, если эта строка имеет отношение внешнего ключа к другой таблице. Это означает, что для кода

patient = Patient.new; file_status.patient = patient

patient будет сохранено автоматически при вызове file_status.save, так как id для patient должны быть созданы для внешнего ключа отношения. Звонок patient.save был бы не save file_status однако.

Если вы хотите, чтобы связанные объекты сохранялись вместе с Patient, вы можете указать :autosave => true при определении отношения has_many.

Подробная информация находится в the docs.

2

Должен ли я вручную объявлять значение каждой переменной экземпляра в контроллере или может/должен делать это в представлении?

Как правило, вы должны избегать определения переменных экземпляра в своих представлениях; особенно если это вызов модели. Это может сбить с толку сохранение, более трудное испытание и не может быть повторно использовано.

Какова правильная техника для отображения тега select для данных, которые не являются основной моделью?

При условии, что «вторичные» модели связаны с «первичной» моделью, вы можете объединить методы вместе. Когда вы определите ассоциацию в своей модели, вы получите these methods for free.

# Where attr is an attr belonging to the patient_address which is 
# associated with the patient 
<%= @patient.patient_address.attr %> 

Когда я иду, чтобы сохранить изменения в форме, мне придется вручную выбрать атрибуты для каждой модели и сохранить их по отдельности? Или есть способ , чтобы назвать такие поля, что ActiveRecord делает правильные вещи?

Вас интересует метод fields_for для вложения связанных моделей в одну форму. Railscasts также имеет несколько отличных примеров работы с соответствующими моделями в формах.

Смежные вопросы