3

我只是从 mongodb 开始。我有一个通过 mongoid (4.0.0) 使用 mongodb 的 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

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

4

2 回答 2

5

公司模式是否扩展了另一种模式?此警告用于警告人们有关在子类中被覆盖的字段。此外,如果您知道您正在覆盖一个字段,您可以传递一个 option overwrite: true,这样警告就不会出现。

于 2013-10-04T14:23:31.697 回答
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

于 2013-10-22T06:00:55.030 回答