Ruby on rails 我如何添加一个返回“的方法?”;变量“;在轨道上?
在Java中,类中的变量通常是私有的,因此外部类通过访问器和mutator方法访问它们。这允许在一个地方更改方法,以便访问它的所有其他代码也会更改 在Rails中,代码通常直接访问项的数据。有没有办法添加一个方法,让所有直接访问数据的代码现在都通过该方法访问数据 示例Ruby on rails 我如何添加一个返回“的方法?”;变量“;在轨道上?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在Java中,类中的变量通常是私有的,因此外部类通过访问器和mutator方法访问它们。这允许在一个地方更改方法,以便访问它的所有其他代码也会更改 在Rails中,代码通常直接访问项的数据。有没有办法添加一个方法,让所有直接访问数据的代码现在都通过该方法访问数据 示例 给定person=person.first,person.name返回Rails中某个人的姓名,例如“Jack”。假设我希望每个person.name返回一个带有名称的标题,例如“Dr.”。我应该对人物模型做什么才能做到这一点?我
给定
person=person.first
,person.name
返回Rails中某个人的姓名,例如“Jack”。假设我希望每个person.name返回一个带有名称的标题,例如“Dr.”。我应该对人物模型做什么才能做到这一点?我可以添加一个名称方法吗?它如何知道调用了哪个名称
class Person < ActiveRecord::Base
#method to change what name returns
end
class-Person
您可以添加与同名的方法,该方法将覆盖默认方法
def name
return "Dr. #{self.name}"
end
或者您可以创建一个新的方法来实现这一点
def formal_name
"Dr. #{self.name}"
end
您可以添加具有相同名称的方法,该方法将覆盖默认方法
def name
return "Dr. #{self.name}"
end
或者您可以创建一个新的方法来实现这一点
def formal_name
"Dr. #{self.name}"
end
Ruby中有几个“方法”可以像Java中一样创建getter和setter
attr_accessor :name # creates getter and setter for @name variable.
attr_reader :name # creates getter for @name variable.
attr_writer :name # creates setter for @name variable.
例如,attr\u accessor:name
的代码等同于这些方法
def name # getter
@name
end
def name=(value) # setter
@name = value
end
当然,您可以根据自己的方便修改getter或setter
def name
"Dr. #{@name}"
end
在Rails ActiveRecord模型中,您必须使用此语法手动创建属性访问器
def name
self[:name]
end
def name=(value)
self[:name] = value
end
Ruby中有几个“方法”可以像Java中一样创建getter和setter
attr_accessor :name # creates getter and setter for @name variable.
attr_reader :name # creates getter for @name variable.
attr_writer :name # creates setter for @name variable.
例如,attr\u accessor:name
的代码等同于这些方法
def name # getter
@name
end
def name=(value) # setter
@name = value
end
当然,您可以根据自己的方便修改getter或setter
def name
"Dr. #{@name}"
end
在Rails ActiveRecord模型中,您必须使用此语法手动创建属性访问器
def name
self[:name]
end
def name=(value)
self[:name] = value
end
Person.name返回Rails中某个人的姓名,例如“Jack”。假设我希望每个Person.name返回一个带有名称的标题,例如“Dr.”。我应该对人物模型做什么才能做到这一点?我可以添加一个名称方法吗
您可以使用attr\u访问器
。此方法创建读卡器
和写卡器
。您还可以显式创建此方法。可以使用self
关键字访问模型内部的实例变量。它基本上是其模型对象的占位符。因此,当您执行self.name
时,它意味着user.name
用于user
模型
您在上面提到的案例中,您有一个值为“Jack”的名称,您希望将其修改为“Dr.Jack”。理想情况下,您必须在保存之前使用,或者在更新之前使用。或者,使用虚拟属性
概念。范例
class User < ActiveRecord::Base
attr_accessible :name_without_title
def name
'Dr. ' + self.name_without_title
end
end
名称
不是类方法。只有当您有User
model对象时,才可以访问它。在模型中,self
与user
相同
Person.name返回Rails中某个人的姓名,例如“Jack”。假设我希望每个Person.name返回一个带有名称的标题,例如“Dr.”。我应该对人物模型做什么才能做到这一点?我可以添加一个名称方法吗
您可以使用attr\u访问器
。此方法创建读卡器
和写卡器
。您还可以显式创建此方法。可以使用self
关键字访问模型内部的实例变量。它基本上是其模型对象的占位符。因此,当您执行self.name
时,它意味着user.name
用于user
模型
您在上面提到的案例中,您有一个值为“Jack”的名称,您希望将其修改为“Dr.Jack”。理想情况下,您必须在保存之前使用,或者在更新之前使用。或者,使用虚拟属性
概念。范例
class User < ActiveRecord::Base
attr_accessible :name_without_title
def name
'Dr. ' + self.name_without_title
end
end
名称
不是类方法。只有当您有User
model对象时,才可以访问它。在模型中,self
与user
相同 您的方法name
将引发一个SystemStackError:stack level太深
,如果它是Rails,那么第二个方法应该是视图帮助器,不是模型的实例方法。您的方法name
将引发SystemStackError:stack level太深
,如果是Rails,则第二个方法应该是视图助手,而不是模型的实例方法。这不是对您问题的直接回答,但是,如果你想对模型数据执行这些扩充,请考虑添加一个类似于堆栈的视图模型/装饰器实现。这不是你的问题的直接答案,但是如果你想执行这些模型数据的扩充以供演示,考虑添加一个类似于您的堆栈的VIEWModel /装饰器实现。当代码添加到Rails模型中时,该代码将返回NIL:<代码> DEF Nord.name Eng/<代码>我澄清了露比(一个类)VS Rails(ActhvReCordD模型)的答案。。当添加到rails模型时,此代码将返回零:def name@name end
我澄清了Ruby(a类)与rails(ActiveRecord模型)的答案。如何实现没有标题的name\u
,这里的更多信息如何实现name\u而不带标题
?attr\u可访问:name\u而不带标题
。还有attr\u writer:name\u而不带标题
,这里有更多信息