2016-03-15 25 views
0

我有一個用戶模型與設計和配置文件模型設置。用戶has_one個人資料和個人資料屬於用戶。拆分軌道形式到更小的形式

配置文件表單非常長,需要10個以上的字段,我所要做的是創建一個帶有指向配置文件模型的較小部分的鏈接的側欄。

例如,個人資料模型需要仔細閱讀詳細信息,因此當用戶點擊個人詳細信息時,他可以輸入個人詳細信息和地址鏈接,當用戶點擊地址時彈出地址表單。所有這些子窗體將基本上構建輪廓模型。

在創建用戶時,配置文件與用戶一起構建並相應連接。

完成這件事的最好方法是什麼?

+1

聽起來像一個好主意,整體。你有沒有具體的問題? – jvillian

+0

我的問題是你如何去做這件事? –

回答

1

一種方法是爲每個部分創建單獨的控制器。所以,你可能有一個PersonalDetailsController,AddressesController,依此類推。

然後,我的做法是創建一個普通的舊的Ruby對象,並與控制器一致地命名。所以,我會有一個PersonalDetailsManager,AddressesManager,依此類推。這些「managers`(有些人稱他們爲‘服務’)可能是這個樣子:

# app/managers/personal_details_manager.rb 
    class PersonalDetailsManager 
    class << self 
     def create_details(params) 
     ... logic to create new personal details 
     end 

     def update_details(params) 
     ... logic to update personal details 
     end 
    end 
    end 

在我的經理人,我總是返回一個哈希值。如果操作成功,散列將包括success: true。而且,我通常包含一個body元素,其中包含(a)控制器在進行任何後期處理時需要的任何信息,或者(b)視圖可能需要進行渲染。我經常包含一個errors元素,以防我想用它來反饋給用戶。

請注意,我把經理放在他們自己的文件夾中。然後,在我的控制,我可能會做這樣的事情:

PersonalDetailsController < ApplicationController 
    def create 
     @results = PersonalDetailsManager.create_details(params) 
     if @results[:success] 
     ... do success routing and/or post processing 
     else 
     ... do failure routing and/or post processing 
     end 
    end 
    end 

有些東西我喜歡這種方法:

  1. 它創造了我的觀點,控制器和 模型之間非常鬆耦合。
  2. 測試PORO比測試控制器更容易, IMO。
  3. 您可以使用管理器來管理多個模型(使用潛在的實際交易塊到 管理失敗的模型交互)的多個模型的交易。
  4. 根據您的要求,您可以跨控制器使用管理器,並保持有關方法來源的透明度。