【问题标题】:mongoid as_document errormongoid as_document 错误
【发布时间】:2013-02-11 12:39:16
【问题描述】:

我正在使用 mongoid 来设计邀请,

为用户分配角色后,我发现以下错误

"**undefined method `as_document' for Array **",有什么建议吗?

invitable = find_or_initialize_with_error_by(:email, attributes[:email])
invitable.attributes = attributes
# scope_id attribute does not set properly
invitable.roles.map {|r| r.scope_id = attributes[:roles_attributes]["0"][:scope_id]}

if invitable.persisted? && !invitable.invited?
  invitable.errors.add(:email, :taken)
elsif invitable.email.present? && invitable.email.match(Devise.email_regexp)
  invitable.invite!
end

我做错了什么?

【问题讨论】:

  • 面临同样的错误。有人可以帮忙吗?
  • 您发布的代码芽没有告诉我们是哪一行引发了错误。你能发布真正的堆栈跟踪或更多信息吗?

标签: ruby-on-rails ruby mongodb devise mongoid


【解决方案1】:

这可能是因为as_document 不适用于数组,只能用于单个对象。

【讨论】:

  • 您的问题中没有足够的代码来提供更多详细信息或可能的更正版本。
  • 我认为这是正确的答案。尝试“whatever.first.as_document”,无论您要表示的对象是什么。
【解决方案2】:

这是 Mongoid 和 has_many 关系的错误。

必须为 has_many 关系定义方法“as_document”,就像为 embeds_many 关系定义一样。

我将创建一个pull request 来解决此问题,同时您可以像这样在 gemfile 中定义 mongoid:

gem 'mongoid', :git => https://github.com/mrjlynch.git

【讨论】:

    【解决方案3】:

    MongoId 5.1.0 发生在我身上,在一个方向我有“embeds_many”,而在另一个方向我有“belongs_to”。 p>

    据我所知,embeds_many 的反面应该是embedded_in。 将反向关系更改为 embedded_in 为我解决了这个问题。

    我不得不承认,这是一个非常晦涩的错误信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2012-08-02
      相关资源
      最近更新 更多