use*_*161 9 ruby ruby-on-rails
在PHP中,我可以在模型中设置属性(不是数据库中的列).例如(PHP代码),
$user = new User;
$user->flag = true;
Run Code Online (Sandbox Code Playgroud)
但是在rails中,当我设置数据库中不存在的任何属性时,它将抛出错误undefined method flag.有attr_accessor方法,但如果我需要大约10个临时属性会发生什么?
Ric*_*eck 12
但如果我需要大约十个临时属性会发生什么?
#app/models/user.rb
class User < ActiveRecord::Base
attr_accessor :flag, :other_attribute, :other_attribute2, :etc...
end
Run Code Online (Sandbox Code Playgroud)
attr_accessor在Rails中创建"虚拟"属性 - 它们不存在于数据库中,但存在于模型中.
与db中的属性一样,attr_accessor只需在类中创建一组setter&getter(实例)方法,您可以在初始化类时调用和交互:
#app/models/user.rb
class User < ActiveRecord::Base
attr_accessor :flag
# getter
def flag
@flag
end
# setter
def flag=(val)
@flag = val
end
end
Run Code Online (Sandbox Code Playgroud)
这是可以预期的,因为这是ActiveRecord的设计原理。如果需要设置任意属性,则必须使用另一种对象。
例如,Ruby提供了一个名为的库OpenStruct,该库允许您创建对象,您可以在其中分配任意键/值。您可能希望使用此类库,然后仅在/需要将其保存到数据库时才将对象转换为相应的ActiveRecord实例。
不要尝试ActiveRecord按照您刚才描述的那样进行建模,因为它根本不是设计成以这种方式进行行为。根据您当前的PHP知识,这将是一种货物培养错误。
| 归档时间: |
|
| 查看次数: |
9139 次 |
| 最近记录: |