dre*_*ker 4 ruby oop activerecord ruby-on-rails ruby-on-rails-3.2
如果我有一个RoR模型person.rb如下:
class Person < ActiveRecord::Base
attr_accessible :first_name, :last_name
validates :first_name, presence: true
validates :last_name, presence: true
end
Run Code Online (Sandbox Code Playgroud)
我似乎无法做以下任何事情:
@full_name = @first_name + " " + @last_name
Run Code Online (Sandbox Code Playgroud)
要么
def full_name
@first_name + " " + @last_name
end
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这两个应该适用于常规的ruby类.
我做了一些阅读,下面似乎是要走的路:
def full_name
self.first_name + " " + self.last_name
end
Run Code Online (Sandbox Code Playgroud)
我可以做这个工作,但我真的很想理解为什么我似乎无法以任何方式引用实例变量(也不能创建新的变量).
ActiveRecord :: Base是否对实例变量做了一些非常有趣的事情?它是否限制模型(在这种情况下为Person类)仅仅是围绕数据库中的内容的包装器?
我似乎无法定义attr_accessor ...但我可以设置first_name和last_name就好了(不仅通过质量赋值而且p = Person.new; p.first_name = foo)
如果有人能够对此有所了解,我将不胜感激.
非常感谢,
Zac*_*emp 10
ActiveRecord模型属性存储在一个名为的实例变量中@attributes,该变量是一个哈希.定义getter和setter以供您访问此变量.
顺便说一句,这是在Ruby中连接字符串的推荐方法:
"#{first_name} #{last_name}"
Run Code Online (Sandbox Code Playgroud)
有一个内置的"to_s"方法(在大多数对象上),允许您以这种方式将它们直接插入到字符串中.虽然你不能这样做:"string " + 1没有引发错误,你可以这样做:"string #{1}"
Active Record不会在单个实例变量中存储数据库属性,这就是为什么必须使用它提供的访问器以及为什么生成的访问器attr_accessor不起作用的原因.
相反,Active Record将属性存储在散列中(在类型转换之前和之后),但这是一个您不必担心的实现细节.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |