2010-03-25 39 views
2

在Rails中動態創建控制器的最佳方式是什麼?以編程方式在Rails中創建控制器

我有一個類需要生成一堆從它繼承的控制器。我可以在/ app/controllers中創建一堆文件,但它們基本都是空文件。有必要動態生成這些類並讓它們像Rails中的其他控制器一樣對待,例如在開發模式下正確重新加載。

我試圖把這個在配置/初始化:

FL.contact_types.each do |contact_type| 
    controller_name = "#{contact_type.pluralize}Controller" 
    Object.const_set(controller_name.to_sym, Class.new(ContactsController)) unless Object.const_defined?(controller_name.to_sym) 
end 

這個工作,但我碰到的依賴性/重裝的問題,並得到「AuthenticatedSystem的副本已經從模塊樹移除,但仍主動「,因爲ContactsController繼承自包含AuthenticatedSystem的ApplicationController。

創建一堆空文件真的是最好的解決方案嗎?

回答

2

你確定你需要多個控制器嗎?你可以有一個控制器傳遞一個值來表示它的行爲嗎?您還可以創建一個具有通用功能的模塊,並具有僅引用該模塊的空控制器文件。

的路線可以用來傳遞類型:現在

map.route "/:type_of_contact/:action/:id/, {:controller => :contact_type} 

中的所有動作,在PARAMS你有鑰匙:type_of_contact引導系統。

您需要確保它接近您的路線末端,以便它不會覆蓋對其他控制器的訪問。

+0

這聽起來像你想要一個捕獲所有控制器爲一組特定的傳入操作。 –

+0

嗯,我想我想爲每個ContactType單獨控制器。他們都是聯繫人,但少數人有一兩個附加領域,所以STI似乎是正確的選擇。它的工作原理,但我只是想解決所有的控制器完全相同的事情,所以我讓他們都繼承自ContactsController。 雖然我可以擺脫額外的控制器,並通過ContactsController執行所有操作。我只需要明確地設置類型,我不能使用form_for魔法。不過,我想這可能仍是一條路。只是不同的混亂。 –

+0

好吧,我採用了通過我的聯繫人控制器運行一切的解決方案。我不喜歡它,但似乎有兩種方式的權衡。這種方式看起來像我不得不使用更少的黑客。我想這是說什麼。 :)謝謝 –

相關問題