gpt4 book ai didi

ruby-on-rails - 基本模型,了解类的基础知识(Ruby on Rails)

转载 作者:太空宇宙 更新时间:2023-11-03 18:26:33 24 4
gpt4 key购买 nike

我知道最好的做法是将尽可能多的代码重构到模型中,但是我对 Rails 和整个编程还比较陌生。似乎给我带来一点麻烦的概念之一是模型的性质,以及对方法和变量的范围或可用性的理解。

首先,在模型中编写了一个典型的方法,您的方法可以被调用的限制(范围)是什么? .self 方面如何工作?哪些 Controller / View 可以访问模型中定义的方法?

我知道这些是相当基本的原则,但我相信我对此的“假设”给我带来了各种各样的问题。

最佳答案

在模型- View - Controller (MVC) 中:

  • 模型保存您的数据,以及与您的数据密切相关的任何功能(低级逻辑)
  • Controller 保存您的业务逻辑(高级应用程序逻辑)
  • View 包含您的表示层(用户界面)

View 可以访问任何公共(public)模型方法。 (注意:默认情况下,所有 ruby​​ 方法都是公共(public)的。)当然,模型对象必须首先在适当的 Controller 方法中实例化,并且必须是实例变量(即 @person)而不是局部变量(即 Controller 中的 person)。

Controller 还可以访问任何公共(public)模型方法。

protected 方法限制对类内部或其任何子类的访问。私有(private)方法仅在类内限制访问。

在我看来,类方法,即 def Person.some_method ...,在任何地方都是可见的,无论它们是否被定义为 public、protected 或 private,尽管这是违反直觉的.


关于你关于 self 的问题......你可以使用 self 从模型内部调用模型自己的方法,你不会出错。

例如对于具有 first_name 和 last_name 列的 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

然而,这太过分了。您实际上不需要使用 self 来检索 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

关于ruby-on-rails - 基本模型,了解类的基础知识(Ruby on Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10106887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com