当前位置:   PHP > 正文

在没有`attr_accessor`的情况下为rails模型设置非数据库属性

ruby,ruby-on-rails,php,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

在PHP中,我可以在模型中设置属性(不是数据库中的列).例如(PHP代码),

$user = new User;
$user->flag = true;

但是在rails中,当我设置数据库中不存在的任何属性时,它将抛出错误undefined method flag.有attr_accessor方法,但如果我需要大约10个临时属性会发生什么?



1> Richard Peck..:

但如果我需要大约十个临时属性会发生什么?

#app/models/user.rb
class User < ActiveRecord::Base
   attr_accessor :flag, :other_attribute, :other_attribute2, :etc...
end

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



2> Simone Carle..:

这是可以预期的,因为这是ActiveRecord的设计原理。如果需要设置任意属性,则必须使用另一种对象。

例如,Ruby提供了一个名为的库OpenStruct,该库允许您创建对象,您可以在其中分配任意键/值。您可能希望使用此类库,然后仅在/需要将其保存到数据库时才将对象转换为相应的ActiveRecord实例。

不要尝试ActiveRecord按照您刚才描述的那样进行建模,因为它根本不是设计成以这种方式进行行为。根据您当前的PHP知识,这将是一种货物培养错误。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号