2010-07-29 55 views
3

我試圖移動通過初學者階段的Rails和到中間但我發現很難找到更多的高級示例學習。Rails模型有多複雜?示例項目?

例如,我讀過你需要小心「嵌套路線」,不應超過2深。在這樣的情況下會發生什麼?

  • 客戶可以將很多訂單
  • 訂單可以有很多項目
  • 項目可以有許多種選擇的
  • 每種類型的選項可以有限制的:可在某些日子,或者需要進行選擇,或影響總價格等。

這是一個愚蠢的差事或簡單的東西的Rails。我假設後者,但無法找到任何有趣的示例項目(源)在那裏學習?書籍似乎停止了基本的想法?

回答

2

你可以隨心所欲地嵌套路線,但請記住,只是因爲你可以不意味着你應該。你挖的越深,你爲自己創造的工作就越多。

我看到的模式是,對於每個深度級別,您需要創建一個處理父參數的基本控制器,以及一個處理細節的子類。這趨向於沿的線打出來:

Customer::BaseController < ApplicationController 
CustomerController < CustomerController:: BaseController 

Customer::Orders::BaseController < Customer::BaseController 
Customer::OrdersController < Customer::Orders::BaseController 

Customer::Orders::Items::BaseController < Customer::Orders::BaseController 
Customer::Orders::ItemsController < Customer::Orders::Items::BaseController 

在每種情況下BaseController處理負載,並且在一般方式的參數解釋,如:

class Customer::BaseController < ApplicationController 
    before_filter :load_customer 

protected 
    def load_customer 
    @customer = Customer.find(params[:customer_id] || params[:id]) 
    rescue ActiveRecord::RecordNotFound 
    render(:partial => 'customer_not_found', :layout => 'application', :status => :not_found) 
    end 
end 

正如你可以看到它可以如果你用這種方式繪製你的應用程序,會有點複雜。你最終也會遇到很長的路線。

如果您的數據庫的設計使記錄具有相當的自治性,並且可以從中獲得很多關係信息,那麼您不一定需要解決所有這些問題。訂單頁面可以提供到@ order.customer的鏈接,而不必在路徑中包含customer_id。

1

嗯,我同意你的看法,很多書在基礎知識上開始和停止。

但是,如果你覺得無聊,你應該坐下來發展一個想法。如果你正在從事一個真正的項目,那永遠是最好的樂趣。 從示例和虛幻場景中學習可能會有所幫助,但是在某個時候是時候去面對一些挑戰了。

個人而言,在完成「使用Rails進行敏捷Web開發」後,我停止閱讀書籍。然後我開始製造自己的失敗,並從中學習。

從理論上講,您可以嘗試爲您可能遇到的每種「中間」或「高級」情況做好準備。

老實說,我用我的方式與問題對抗的戰鬥與書中發現的任何理論場景都沒有關係。我不得不坐下來,跟蹤問題,閱讀回溯,思考它們,谷歌類似的問題,寫測試...這是真正幫助我獲得經驗。

去那裏找到或開發一個想法。如果你有一個,寫測試並嘗試實現它。 這會給你提升,你可能正在尋找。

注:http://github.com是一個很好的找到源代碼的地方,看看&從中學習。

0

看看opensourcerails.com - 找到一個你感興趣的應用程序,獲取源代碼,然後逐個查看它。在本地運行它,找到有趣的功能,然後進入代碼,看看它是如何完成的。