很難提供一個很好的建議,但沒有看到一些代碼,但這裏有兩種可能性。
這聽起來像你有兩個客戶對這個代碼。也許使它成爲一個引擎(只是一個奇特的寶石),你可以添加你的路徑到自動加載路徑,然後在沒有任何障礙的情況下使用它。
也許創建一個常量,然後重新打開它的模型:在你的模型文件
在一些初始化
ActualNamespace = Class.new
DynamicNamespace = ActualNamespace
class DynamicNamespace
class MyModel
end
end
DynamicNamespace::MyModel # => ActualNamespace::MyModel
那麼對於您的命令行應用程序
DynamicNamespace = Object
哪一樣沒有命名空間:
DynamicNamespace::MyModel # => MyModel
現在,你可能會風具有一定的Rails的魔術,這在很大程度上是基於反射的困難。我不完全知道你會面對什麼,但我希望表單在提交數據時開始生成錯誤的鍵。你可以通過定義DynamicNamespace.name
或其他的東西來解決這個問題。自動加載,也可能成爲一個問題,但我認爲你可以以某種方式聲明自動加載路徑(我不知道,但谷歌搜索「軌道自動加載」提供了一些有希望的結果,看起來像它只是鉤到Ruby的自動加載 - 儘管我認爲這會在Ruby 2.0中消失)最糟糕的情況是,您可能需要定義一個railtie,以便爲您加載dirs。這一切都是我的聯盟,但我認爲你需要在應用程序初始化之前定義的railties,所以你可能需要在配置/ application.rb中需要railtie
不幸的是,在那一天,當你開始偏離Rails約定時,生活開始變得艱難,而你從來沒有想過的所有魔法都會崩潰,所以你突然不得不跳入Rails代碼庫來找出它在做什麼。
如果你問我,這個解決方案只是感覺錯誤。你可以在rails應用程序中顯示一些你不喜歡的例子嗎? –
路線稍微複雜一點,但可以算出來。URL助手變得相當詳細。像TestStats命名空間中的Listname和/或Task模型一樣:test_stats_listnames_path(),test_stats_listname_tasks_path(),new_test_stats_listname_task_path() – Ben
我理解你對這種感覺錯誤的看法。但是,從ActiveRecord模型的角度來看,它們本身都是封裝在gem中的,這對於gem的各種用戶來說會很好。 CLI工具開發人員會喜歡命名空間,因爲gem可能只是該工具的一小部分。雖然rails應用程序開發人員的世界將圍繞使命名空間不那麼有用/必要的模型。 – Ben