【问题标题】:Seeding RELATIONAL Mongo DB Data in RAILS在 RAILS 中播种 RELATIONAL Mongo DB 数据
【发布时间】:2014-07-17 17:56:48
【问题描述】:

我是 MonogoDB 的新手。我已经能够播种数据,但不能播种关系数据。

在我的模型中

has_and_belongs_to_many :users

field :encrypted_password, type: String, default: ""

field :name, type: String
field :address, type: String
field :city, type: String
field :state, type: String
field :zip, type: String

在像 MySQL 这样的 DB 中,我不会使用上述语法,而是制作一个迁移文件,将其推送到架构中。在这里,在 Mongo 中,它似乎更加动态。

所以对于第一行 (has_and...) 我想我可以使用

XYZ.create(:name => "x", {...}, user_id=>[1,2])
User.create(:name => "y", {...}, XYZ_id => [1])

这给了我一个 nomethod 错误。

Attempted to set a value for 'user_id' which is not allowed on the model XYZ.

所以我添加了动态属性行:

  include Mongoid::Attributes::Dynamic

在两个模型上关联模型。

当我登录该用户时,它不知道关联(该特定用户不属于 XYZ。)

我自然地加载了 Rails C,但在键入时几乎没有看到我所期望的

User.all (or) XYZ.all

我看到了

2.1.0 :004 > User.all
=> #<Mongoid::Criteria
selector: {}
options:  {}
class:    User
embedded: false>

所以我不确定如何调试问题。 我怎样才能确保适当地建立关系?

【问题讨论】:

    标签: ruby-on-rails mongodb


    【解决方案1】:

    您确实在使用 Mongoid,正如我从您的最后一个问题中看到的那样。但在那张纸条上,您似乎只需要让 Mongoid 变得更舒服,以及如何实际创建关系。创建关系时,您无需手动将 ID 放入 model_id 字段。实际上,您只需将整个保存的模型传递给您正在创建关系的模型。

    http://mongoid.org/en/mongoid/docs/relations.html

    上面的参考页面应该很有帮助。

    对于您的示例,您需要执行以下操作:(我使用 Home 类作为示例)

    a = User.create(:name => "y", {...})
    b = User.create(:name => "user2", {...})
    home = Home.create(:name => "x", {...})
    home.users = [a, b]
    a.homes.push(home)
    b.homes.push(home)
    

    可能有更快的方法可以做到这一点,我的意思是要使用更少的代码行,但我认为这应该有助于理解关系如何与 Mongoid 一起工作的概念,并且只是为了缩小您在docs,看起来您在这里建立了引用的 N-N 关系;)

    【讨论】:

      【解决方案2】:

      您似乎没有为 MongoDB 使用任何 ODM 框架。请注意 ActiveRecord 不支持 MongoDB。 Mongoid 是一个用 Ruby 编写的非常好的 MongoDB ODM。你可以找到更多关于它的信息hereHere 是 Ryan Bates 在 Mongoid 上的 Railscast。这将帮助您解决问题。

      也就是说,就播种数据而言,如果您仍然遇到问题,请通过thisthis

      希望对你有帮助。

      【讨论】:

      • Peeyush,请看下面的答案,也许你可能有不同的答案,因为他实际上正在使用 Mongoid,我不是 Mongoid 专家。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      相关资源
      最近更新 更多