我有这个模型。我的朋友告诉我。我应该在unique / confno上只有一个 INSTANCE 。 。
这里的实例在哪里?
class Confbridge < ActiveRecord::Base
has_many :confbridge_schedules, :dependent => :destroy
validates :confno, uniqueness: true, :allow_nil => true, :allow_blank => true
:confno => confno, :circle => cid, :confbridge_id => id )
end
如何轻松降低实例费用?
谢谢:)
答案 0 :(得分:4)
简而言之,实例是某个类的对象。在您的示例中,Confbridge
是一个模型类。以下所有都是此类的实例:
Confbridge.new
Confbridge.first
Confbridge.find(1)
答案 1 :(得分:2)
实例通常表示数据库表中的一行,但更一般地说,它具有与您的类相关的非常具体的含义。
类和实例是面向对象的编程概念,但也可以存在于其他上下文中。
即使在现实世界...... 让我们假装你有一个名为'Car'的课程
一个例子就是您现在停在车库里的特定车辆。另一个例子是你邻居的车。
在数据库上下文中,如果您的类名为“EmployeeRecord”,那么该实例将是包含您的姓名和员工编号的记录,而不是您的老板。
但在你的情况下,在Rails中:
你有一个名为Confbridge
的班级。如果您使用例如conf = Confbridge.new
创建新的一个,那么您在变量conf
中拥有的是类Confbridge
的实例
要专门查看您显示的代码 - 您在该代码中没有实例。上面显示的是构成Confbridge
类的代码 - 您可以创建具有您在编写类时定义的属性的实例(例如,每个实例都将验证confno
如果您拨打conf.save
)
答案 2 :(得分:1)
实例来自Object Orientated Programming(Ruby是其支持者)......
OOP基本上用对象替换变量 (虽然它们是相同的东西)。
两者之间的区别在于对象存储为“类”或“函数”,同时具有属性和函数附加了em> / 方法。
简而言之,对象可以在应用程序中进行操作,而变量是静态的。
游戏使用OOP,因为它允许您将一系列对象调用到环境中并与之交互。
例如,对于Mario,Mario
将是一个对象,Koopa
可以是一个对象等。
当您移动时,您正在环境中编辑Mario
的“位置”(x
/ y
),这也可能意味着如果坐标与另一个对象相交,马里奥死了......
def keypress
@mario.move x,y
end
class Mario
def move x,y
##updates environment
##checks if collision
end
end
这些物体之间的互动性使得游戏看起来像是保持状态(每个敌人都是具有不同特征的物体)。
因此,当您考虑Rails
时,您必须明白您所做的一切都是面向对象的。所有变量等都应该是对象。模型负责使用某些属性/方法等构建这些对象:
#app/models/car.rb
class Car < ActiveRecord::Base
def blow_up!
self.destroy
end
end
@car = Car.find params[:id] #-> invokes an instance of the Car object, populating with data from the db
@car.blow_up! #-> invoking the "blow_up!" instance method.
因此,为了描述一个对象的实例,你所说的是一个已初始化的类&amp;填充了数据库中的数据。
在您的情况下,当您使用class methods之一调用类时,实例会出现在Controller
中:
@confbridge = Confbridge.find(1) #-> creates an instance
@confbridge.destroy #-> performs action on instance