這是很難完全,徹底回答這些問題不知道該應用程序的完整程度(加上還有的去了解一些這些東西多種方式),但我會回答基於這些信息你給如何我可能會去做一些事情。
1.什麼應該是我的控制器和行動?
Rails控制器通常命名爲,並且包含管理單個資源的方法。資源是任何領域的概念;經常,他們與您的Rails模型一對一映射,但他們不需要。
在你的情況,你可以去幾個方向:
- 有各統計「類型」(例如CPU,內存等),爲每個「STAT」操作的控制器(免費,總等)
- 有一個控制器「sys_stats」,每種類型的行動
這一決定可能取決於如何您的應用程序的其餘部分的結構;如果sys_stats
是應用程序而言,唯一的東西,也許它更有意義去前者。
2.由於控制器和動作只允許URI中的兩級,即/ controller/action,我如何獲得像上面提到的那樣的長URI。
通過Rails路由系統可以很好地控制URL生成。你可以找到一噸的Rails Routing from the Outside In guide具體細節,但如果你與控制器/動作佈局#1(如上所述)去了,它可能是這個樣子:
get "dashboard/sys_stats/:controller/:action"
3.在某種程度上,CPU和內存統計是我的模型。
是的,以這種方式構建應用程序將使測試更容易,並且很可能更容易處理和維護。重要的是要記住,你可以有一個模式(即使在app/models
),而不需要該類以任何方式延伸ActiveRecord::Base
是很重要的。有了正確的抽象,您的控制器甚至不需要知道您的模型不會綁定到數據庫。
我已經開始了一個小演示應用程序,演示了其中的一些概念;你可以在GitHub上找到https://github.com/BinaryMuse/so16493562-rails-stats-example。
一些相關文件:
config/routes.rb
RailsSystemStats::Application.routes.draw do
get "dashboard/sys_stats/:controller/:action"
end
app/controllers/memory_controller.rb
class MemoryController < ApplicationController
before_filter do
@memory = MemoryStat.new
end
def free
respond_to do |format|
format.html
format.json do
render json: { memory: { free: @memory.free } }
end
end
end
def total
respond_to do |format|
format.html
format.json do
render json: { memory: { total: @memory.total } }
end
end
end
end
app/models/memory_stat.rb
class MemoryStat
def initialize
end
def free
6.5.gigabytes
end
def total
8.gigabytes
end
end
(明顯你可以用一個實際得到系統細節的類來替換這個類。)