我明白,這是重構儘可能多的我的代碼儘可能到模型的最佳實踐,但是我是比較新的軌道,和編程爲一體。似乎導致我有點麻煩的一個概念是模型的本質,以及理解方法和變量的範圍或可用性。基本款,理解類的基本面(Ruby on Rails的)
首先用模型中編寫的典型方法,可以調用您的方法的限制(範圍)是什麼? .self方面如何工作?哪些控制器/視圖可以訪問模型中定義的方法?
我明白,這些都是相當基本的原則,但我相信我的「想當然」關於這是造成我的問題,所有的方式。
我明白,這是重構儘可能多的我的代碼儘可能到模型的最佳實踐,但是我是比較新的軌道,和編程爲一體。似乎導致我有點麻煩的一個概念是模型的本質,以及理解方法和變量的範圍或可用性。基本款,理解類的基本面(Ruby on Rails的)
首先用模型中編寫的典型方法,可以調用您的方法的限制(範圍)是什麼? .self方面如何工作?哪些控制器/視圖可以訪問模型中定義的方法?
我明白,這些都是相當基本的原則,但我相信我的「想當然」關於這是造成我的問題,所有的方式。
在模型 - 視圖 - 控制器(MVC):
視圖有權訪問任何公共模型方法。 (注意:默認情況下,所有ruby方法都是公共的。)當然,模型對象必須首先在適當的控制器方法中實例化,並且必須是控制器中的實例變量(即@person
)而不是本地變量(即person
)。
控制器還可以訪問任何公共模型方法。
受保護的方法限制對班內或班內任何孩子的訪問。私人方法只限於在課堂內進行訪問。
在我看來,類別方法(即def Person.some_method ...
)在任何地方都可見,無論它們是否被定義爲公共,受保護或私有,儘管這是違反直覺的。
關於你對自己的問題...你可以使用自我來模擬自己的方法的所有調用,並且你不會出錯。
例如對於具有姓氏和姓氏列的Person模型:
class Person < ActiveRecord::Base
def full_name
"#{self.first_name} #{self.last_name}"
end
def parse_name full
self.first_name, self.last_name = full.split
end
end
但是,這太過分了。你其實並不需要使用自己在ActiveRecord的檢索屬性,只設置屬性,所以下面的罰款:
class Person < ActiveRecord::Base
def full_name
"#{first_name} #{last_name}"
end
def parse_name full
self.first_name, self.last_name = full.split
end
end
謝謝你,那太棒了,太自我了。只有當我想更改數據庫中的屬性時才需要,而不是如果我只是想讀取它。 – RMcNairn 2012-04-11 17:07:50
沒錯。別客氣! – 2012-04-11 17:18:05
簡而言之,您可以用來訪問模型的內容沒有真正的限制。 從技術上講,您可以在視圖和控制器或其他模型中調用模型中的方法。
以下是我看待它:
模型=您的應用程序的邏輯
查看=前端爲你的模型,在您需要的用戶(或服務)看到
控制器的片搭售=視圖和模型膠,調用模型數據並將其傳遞到視圖
您應該避免直接從視圖調用模型。 如果您要對控制器中的對象執行多於1次或2次的操作,則應該將其移至模型方法中。
從這裏,我建議你拿起一本書來了解什麼是類,實例方法,類方法等。 我推薦使用Pragma程序員的「Learn to Program」。 http://pragprog.com/book/ltp2/learn-to-program
從那裏瞭解MVC是什麼(大量的信息在那裏),這將有助於您如何理解模型,視圖,控制器以及它們如何關聯。
非常感謝,謝謝,我肯定會看看! – RMcNairn 2012-04-11 15:47:17
根據您的問題,看起來您需要閱讀面向對象編程和MVC模式。當然,這些不是Rails專有的。
「的問題,所有的方式」 - 列舉其中的一些,也許我們可以解決這些問題。您發佈的主要內容非常寬泛,無法回答,但最廣泛的說法是:沒有任何限制;-) – Pavling 2012-04-11 15:25:09