2010-08-13 26 views
2

我正在設計一個儀表板頁面,它彙總了多個模型中的數據,全部在一個頁面上。並且我還希望在該頁面上包含用於創建新項目的表單。顯示頁面上的新/編輯操作::最佳實踐問題

一些試驗後,我意識到我需要一些意見,以最佳實踐爲這種情況... ...這裏有2種方法我試圖使用嵌套field_fors

1)...

form_for @job do |j| 
    j.fields_for :invoice do |i| 
    i.fields_for :charges do |c| 
     c.text_field :amount 

或2)

form_for @job.invoice.charges.build do |c| 
    c.text_field :amount 

與嵌套的方式,現在的問題是我有一個新的對象,其拋出一個扳手在我的節目視圖,當它通過現有的對象迭代。突然嘗試渲染所有created_at時間失敗,因爲新對象尚未保存。

方法2)的問題是要麼我發佈每個窗體到自己的控制器來處理它,但如果它不驗證,我需要呈現顯示視圖...這意味着我必須提供每個控制器我有所有實例變量和方法等呈現頁面的表單。

我還沒弄明白錯誤處理是如何工作的。有時我的表單被標記爲fieldWitherrors類,有時它沒有。我一直在嘗試這兩種方法,但無法解決它。

任何人都可以提供關於我應該去這裏的方向的建議嗎?

回答

1

如果你需要新的充電,那麼後一種方法就是這樣。請注意,這些做基本相同:

form_for @job.invoice.charges.build do |c| 

@charge = Charge.new(:invoice_id => @job.invoice.id) 
form_for @charge do |c| 

使用第二種情況下你,直到它的保存不與工作連接新充,如果您將第一行以@ charge = ...給控制器,當驗證失敗時,您可以重新渲染表單。