mongoid - 覆盖现有的现场警告

时间:2013-10-04 10:38:06

标签: ruby-on-rails mongodb mongoid

我刚开始使用mongodb。 我有一个使用mongodb通过mongoid(4.0.0)的rails 4.0应用程序 有一个公司模型和一个用户模型。用户belongs_to :company和公司has_many :users

当我启动控制台并且Company.first时,我找到了我创建的公司。当我第一次Company.first.users 时,我得到了:

WARN -- : Overwriting existing field所有字段。

然后公司用户按预期进行。

当我第二次这样做时,没有警告,只有公司用户。

为什么?有什么不对的吗? 我在Heroku中有应用程序,同样的情况发生在那里。

感谢。

更新1

这是模型

class Company
    include Mongoid::Document
    include Mongoid::Timestamps

    field :name
    field :token

    has_many :users
    has_many :feedbacks
    has_many :main_categories
    has_many :departments

end

更新2

实际上,只有用户模型

才会出现这些警告
User.all
W, [2013-10-05T21:30:34.522867 #23442]  WARN -- : Overwriting existing field email in class User.
W, [2013-10-05T21:30:34.523418 #23442]  WARN -- : Overwriting existing field crypted_password in class User.
W, [2013-10-05T21:30:34.523662 #23442]  WARN -- : Overwriting existing field salt in class User.
W, [2013-10-05T21:30:34.523888 #23442]  WARN -- : Overwriting existing field remember_me_token in class User.
W, [2013-10-05T21:30:34.524129 #23442]  WARN -- : Overwriting existing field remember_me_token_expires_at in class User.
W, [2013-10-05T21:30:34.524367 #23442]  WARN -- : Overwriting existing field reset_password_token in class User.
W, [2013-10-05T21:30:34.524595 #23442]  WARN -- : Overwriting existing field reset_password_token_expires_at in class User.
W, [2013-10-05T21:30:34.524834 #23442]  WARN -- : Overwriting existing field reset_password_email_sent_at in class User.
W, [2013-10-05T21:30:34.525070 #23442]  WARN -- : Overwriting existing field failed_logins_count in class User.
W, [2013-10-05T21:30:34.525319 #23442]  WARN -- : Overwriting existing field last_login_at in class User.
W, [2013-10-05T21:30:34.525546 #23442]  WARN -- : Overwriting existing field last_logout_at in class User.
W, [2013-10-05T21:30:34.525774 #23442]  WARN -- : Overwriting existing field last_activity_at in class User.
 => #<Mongoid::Criteria
  selector: {}
  options:  {}
  class:    User
  embedded: false>

1.9.3p327 :003 > Company.all
 => #<Mongoid::Criteria
  selector: {}
  options:  {}
  class:    Company
  embedded: false>

更新3

这与巫术有关,所以我会与他们核对。

2 个答案:

答案 0 :(得分:4)

公司模型是否扩展了另一个模型?此警告用于警告人们在子类中覆盖的字段。 此外,如果您知道要覆盖某个字段,则可以传递选项overwrite: true,以便警告不会显示。

答案 1 :(得分:2)

警告的原因是Sorcery正在自动向模型添加必填字段。因此,不需要在模型中定义Sorcery需要运行的字段。在我的例子中,这是模型最终的样子:

class User
  include Mongoid::Document
  include Mongoid::Timestamps

  authenticates_with_sorcery!

  field :name
  field :surname
  field :role

  belongs_to :company
end 

通过MongoID或MongoMapper使用MongoDB时完成:https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model.rb#L57