2009-07-18 48 views
0

我正在進行從傳統數據庫驅動的Windows應用程序到Rails應用程序的相當大的轉換。由於涉及到大量的表單和數據庫表,我想確保在得到太多之前我有正確的方法。Rails應用程序的方法

我的主要擔心是儘量減少我必須編寫的代碼量。有很多模型可以一起交互,我想確保我正確使用它們。下面是一組簡化的模型:

種類的患者<的ActiveRecord :: Base的 的has_many:PatientAddresses 的has_many:PatientFileStatuses 結束

類PatientAddress <的ActiveRecord :: Base的 belongs_to的:病人 結束

類PatientFileStatus < ActiveRecord :: Base belongs_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

前三行搶病人模型及其關係。接下來的三行是我從這些關係中提供價值觀的例子。

該視圖具有文本字段和選擇字段的組合以顯示上述數據。例如:

「VAL1」, 「val2的」=> 「val2的」, 「寫」=> 「寫」},:include_blank =>真)%> :力%>

(順便說一句,選擇標籤是不是真正的工作,我想我必須使用collection_select)

我的問題是:

  1. 我必須手動聲明控制器每個實例變量的值,或可以/應注意什麼?我在視野內做到了嗎?
  2. 對於不是主要模型的數據顯示選擇標記的正確方法是什麼?
  3. 當我要將更改保存到此表單中時,是否必須手動爲每個模型挑選屬性並單獨保存它們?或者有沒有一種方法來命名這些字段,使ActiveRecord能夠做正確的事情?

在此先感謝, 亞倫。

+0

你們協會裏的駱駝案例符號是什麼? – 2009-07-18 14:32:16

回答

0

1) 沒有什麼能夠阻止您在視圖中編寫任意Ruby代碼,因此您只需編寫@patient.PatientAddresses,而不是在控制器中定義@patient_addresses。無論如何,這只是鍋爐板,如果您希望稍後再進行更改,那麼使用搜索/替換就很容易進行重構。 OTOH我會放線

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

控制器,因爲你只想要執行的查詢一次,並且查詢也可以更改。

3) save方法ActiveRecord有點微妙。通常,它只會保存調用方法的對象以及任何依賴關係。如果該行與另一個表具有外鍵關係,則可能無法僅保存一行。這意味着,該代碼

patient = Patient.new; file_status.patient = patient

patient調用file_status.save時會被自動保存,因爲idpatient必須爲外鍵關係產生。然而,調用patient.save不是保存file_status

如果要將關聯的對象與Patient一起保存,則可以在定義has_many關係時指定:autosave => true

詳細信息在the docs

2

我是否必須手動聲明控制器中每個實例變量的值,或者可以/應該在視圖中執行它嗎?

作爲一般的經驗法則,您應該避免在您的視圖中定義實例變量;特別是如果它是調用模型。維護可能會讓人困惑,更難以測試並且不能重複使用。

對於不是主要模型的數據顯示選擇標記的正確方法是什麼?

假設「次要」模型與「主要」模型相關聯,則可以將方法鏈接在一起。當您在模型中定義關聯時,您將獲得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也有一些在窗體中使用關聯模型的很好的例子。

相關問題