【问题标题】:Where to use attr_accessor in Rails?在 Rails 中哪里可以使用 attr_accessor?
【发布时间】:2016-10-06 08:40:04
【问题描述】:

为什么要在 Rails 中使用 attr_accessor

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails attr-accessor


    【解决方案1】:

    如果“in rails”是指“activerecord 模型”,那么您的猜测是正确的:瞬态属性。

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

    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 方法)。

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

    【讨论】:

    • 那么真正的瞬态变量并没有多大用处,对吧?
    • @chris987:在我的实践中,没有。但我确信有真正有效的用例。
    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多