[英]usage of attr_accessor in Rails
什么attr_accessor
在Rails模型中使用attr_reader
/ attr_writer
/ attr_accessor
?
从来没有,除非你有特殊需要。 为您创建自动数据库支持的访问者,因此您无需担心。
您创建的任何attr_accessor
都将更改rails对象上的相关@attr
,但是当对象被销毁时,这将丢失,除非您将其粘贴回数据库中。 有时你确实想要这种行为,但在rails应用程序中这是不寻常的。
现在在红宝石中,这是一个不同的故事,你最终经常使用它们。 但是如果你需要它们在轨道上我会感到惊讶 - 特别是最初。
attr_accessor可以用于您不希望直接存储在数据库中的值,并且只存在于对象的生命周期中(例如密码)。
attr_reader可以用作执行以下操作的几种替代方法之一:
def instance_value
"my value"
end
Rails模型只是继承自ActiveRecord::Base
ruby类。 ActiveRecord使用attr_accessor
来定义引用ruby类表的列名的getter和setter。 重要的是要注意这只是为了坚持; 这些模型仍然只是红宝石类。
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_accessor
是getter和setter的快捷方式,而attr_reader
是getter的快捷方式, attr_writer
只是setter的快捷方式。
在rails中,ActiveRecord以方便的方式使用这些getter和setter来读取和写入数据库的值。 但是,数据库只是持久层。 您可以像使用任何其他ruby类一样自由地使用attr_accessor
和attr_reader
来正确attr_reader
业务逻辑。 由于您需要在需要持久保存到数据库之外获取和设置对象的属性,因此请相应地使用attr_
。
更多信息:
http://apidock.com/ruby/Module/attr_accessor
如果您使用它来验证terms_of_service的接受度,那么您应该考虑使用validates:terms_of_service,:acceptance => true。 它将创建一个虚拟属性,并且更加简洁。
http://guides.rubyonrails.org/active_record_validations.html#acceptance 。
一个例子是在一个序列化列中存储许多选项。 如果您尝试为这些选项之一设置文本字段,表单构建器会抱怨。 您可以使用attr_accessor伪造它,然后在更新操作中将其保存在序列化列中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.