【问题标题】:How to initialize field based on another field?如何根据另一个字段初始化字段?
【发布时间】:2013-10-08 04:04:15
【问题描述】:

我有一个带有:email:user_name 的用户模型,我想用:email 的一部分自动初始化:user_name

class User
  include Mongoid::Document
  field :email
  field :user_name
end

我使用 simple_form 创建用户。 如何根据:email初始化:user_name

【问题讨论】:

  • 请回答问题而不是编辑...
  • 你能举个例子吗?
  • 是否有任何答案解决了您的问题或者您需要更多详细信息?

标签: ruby-on-rails ruby-on-rails-3 mongoid mongoid3


【解决方案1】:

在你的模型中:-

before_create :add_user_name

private
  def add_user_name
    self.user_name = self.email
  end

【讨论】:

    【解决方案2】:

    使用默认值:

    class User
     include Mongoid::Document
     field :email, type: String
     field :user_name, default: ->{ "email_is: #{email}" }
    end
    

    "如果你想设置一个依赖于文档的默认值 lambda 或 proc 中的 state、self 评估为文档 实例。”

    见:Mongoid fields documentation

    用rails c测试:

    u = User.new email: "name@domain.com"
    u.user_name # => "email_is: name@domain.com" 
    

    【讨论】:

    • 不需要使用self。 self.email 或 email 将完成这项工作。此外,即使在实现默认 user_name 之前在数据库中创建的用户也可以使用。
    • 在 Rails 控制台中创建用户时如果不使用self.email 会抛出错误。
    • 您使用的是哪个 rails/mongoid 版本。它适用于我使用 ruby​​ 1.9.3、rails 3.2.0 和 mongoid 3.1.5 测试
    猜你喜欢
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2021-12-14
    • 2019-04-20
    • 1970-01-01
    • 2022-07-20
    • 2010-12-27
    相关资源
    最近更新 更多