在Rails中使用attr_accessor

什么attr_accessor在Rails模型中使用attr_reader / attr_writer / attr_accessor

attr_accessor可以用于你不想直接存储在数据库中的值,并且只会存在于对象的生命周期中(例如密码)。

attr_reader可以作为几个select之一来做这样的事情:

 def instance_value "my value" end 

从来没有,除非你有特定的需要。 自动数据库支持访问器为您创build,所以你不必担心。

你创build的任何attr_accessor都会改变rails对象上相关的@attr ,但是当对象被销毁的时候,这个会丢失,除非你把它粘回到数据库中。 有时你确实需要这种行为,但在Rails应用中却是不寻常的。

现在ruby,这是一个不同的故事,你最终经常使用这些。 但是如果你需要他们的话,我会感到惊讶,特别是最初。

Rails模型只是inheritance自ActiveRecord::Base ruby类。 ActiveRecord使用attr_accessor来为引用ruby类表的列名定义getter和setter。 重要的是要注意,这只是为了持久; 模型仍然只是ruby类。

attr_accessor :foo只是以下的快捷方式:

 def foo=(var) @foo = var end def foo @foo end 

attr_reader :foo只是下面的一个快捷方式:

 def foo @foo end 

attr_writer :foo是以下的快捷方式:

 def foo=(var) @foo = var end 

attr_accessorgetter和setter的快捷方式, attr_writergetter的快捷方式, attr_writersetter的快捷方式。

在rails中,ActiveRecord以一种方便的方式使用这些getter和setter来读写数据库的值。 但是,数据库只是持久层。 您应该可以像使用任何其他ruby类一样自由使用attr_accessorattr_reader来正确组合业务逻辑。 由于您需要在您需要保存到数据库之外获取和设置对象的属性,请相应地使用attr_

更多信息:

http://apidock.com/ruby/Module/attr_accessor

http://www.rubyist.net/~slagell/ruby/accessors.html

Ruby中的attr_accessor是什么?

如果您正在使用它来validationterms_of_service的接受程度,则应该考虑使用validation:terms_of_service,:acceptance => true。 它将创build一个虚拟属性,并且更加简洁。

http://guides.rubyonrails.org/active_record_validations.html#acceptance

一个例子是将一些选项存储在一个序列化的列中。 如果您尝试为其中一个选项设置文本字段,则表单构build器会投诉。 您可以使用attr_accessor来伪造它,然后在update操作中将其保存在序列化列中。