Reputation: 12161
I have two models like this
class User
include Mongoid::Document
has_one :tweet
has_many :tweet
end
class Tweet
include Mongoid::Document
belongs_to :created_by, class_name: "User"
end
Surely, this one doesn't work but this is what I want to get to. Basically, A tweet should have one created_by
and a lot of mentioned users. For example, if a tweet is like this
"Today I met @user1 and @user2"
The Tweets
collection should be something like this
{
"created_by_id" : "ObjectId("of created user"),
"mentioned_user_ids : [ObjectId("user1"), ObjectId("user2")]
}
And Users
collection should be something like this
{
"_id" : ObjectId("of created user")
},
{
"_id" : ObjectId("user1")
},
{
"_id" : ObjectId("user2")
}
Upvotes: 0
Views: 46
Reputation: 5535
This should work:
class User
include Mongoid::Document
has_many :owner_tweets, class_name: 'Tweet', inverse_of: :created_by
end
class Tweet
include Mongoid::Document
belongs_to :created_by, class_name: "User", inverse_of: :owner_tweets
has_and_belongs_to_many :mentioned_users, class_name: "User", inverse_of: nil
end
owner = User.create
user1 = User.create
user2 = User.create
tweet = Tweet.create( owner_id: owner.id )
tweet.mentioned_users << user1
tweet.mentioned_users << user2
tweet
=> #<Tweet _id: 52da59abd9a0d1fda4000003, created_by_id: "52da5985d9a0d1fda4000001", mentioned_user_ids: ["52da59a2d9a0d1fda4000002", "52da59a2d9a0d1fda4000003"]>
owner
=> #<User _id: 52da5985d9a0d1fda4000001, >
For more information: http://mongoid.org/en/mongoid/docs/relations.html
Upvotes: 1