我明白,这是重构尽可能多的我的代码尽可能到模型的最佳实践,但是我是比较新的轨道,和编程为一体。似乎导致我有点麻烦的一个概念是模型的本质,以及理解方法和变量的范围或可用性。基本款,理解类的基本面(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