簡體   English   中英

在RAILS中播種關系Mongo DB數據

[英]Seeding RELATIONAL Mongo DB Data in RAILS

我是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這樣的數據庫中,我不會使用上述語法,而是創建一個遷移文件,將其推送到架構中。 在這里,在Mongo中,似乎正在飛速發展。

所以在第一行(has_and ...)中,我認為我可以使用

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

這給了我一個方法錯誤。

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>

所以我不確定如何調試問題。 我如何確保適當地建立關系?

看來您沒有為MongoDB使用任何ODM框架。 請注意,ActiveRecord不支持MongoDB。 Mongoid是用Ruby編寫的非常好的MongoDB ODM。 您可以在此處找到有關它的更多信息。 是Ryan Bates在Mongoid上發布的Railscast。 這將幫助您解決問題。

這就是說,只要播種數據而言,經過這個這個 ,如果你仍然面臨的問題。

希望能幫助到你。

從問題的最后一部分可以看出,您確實在使用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一起工作的概念,並且可以縮小文檔的搜索范圍,看起來您在這里建立了參考NN關系;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM