在 Rails 中的什么地方使用 attr_accessor?

Where to use attr_accessor in Rails?

为什么要在 Rails 中使用 attr_accessor

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

我的理解是它可以用来创建 "transient" 不在数据库中持久化的变量。而且它可以替代手动编写 setter 和 getter。

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

所以我仍然不确定我会在什么情况下实际使用它。谁能详细说说?

如果 "in 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

当然,您不应该从 html 表单(控制器中的 strong_params 方法)接受此 "private" 标志。

进一步思考这个例子:您可能想将这个标志存储在数据库中(是否是用户管理员)。但我希望这无论如何都能说明这个想法。