在Rails中使用attr_accessor的位置?

时间:2016-06-06 16:30:39

标签: ruby-on-rails attr-accessor

为什么要在Rails中使用attr_accessor

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

我的理解是它可以用来创建db中没有持久存储的“瞬态”变量。并且它可以替代手动编写setter和getter。

但我不认为其他答案比上述解释更多。即:Why use Ruby's attr_accessor, attr_reader and attr_writer?

所以我仍然不确定在什么情况下我会实际使用它。任何人都可以详细说明吗?

1 个答案:

答案 0 :(得分:0)

如果通过"在rails"你的意思是" activerecord models",那么你的猜测是正确的:瞬态属性。

这是一个例子(有点做作):

class User < ActiveRecord::Base
  attr_accessor :is_admin

  validate_presence_of :name, :shipping_address, :billing_address, unless: :is_admin
end

通过常规流程(注册页面)创建的用户将拒绝保存,除非您提供所有信息。但是创建管理员的流程更简单:

User.create(email: 'chris@example.com', is_admin: true)
# you do this in rails console or rake task, for example

当然,你不应该接受这个&#34;私人&#34;来自html表单的标志(控制器中的strong_params方法)。

更多地考虑这个例子:您可能希望将此标志存储在数据库中(是否为用户admin)。但我希望无论如何都应该说明这个想法。