class User
include Mongoid::Document
has_many :favorites, class_name: "Item"
end
class Item
include Mongoid::Document
belongs_to :user, dependent: :nullify
end
我希望用户拥有一个收藏夹数组,但在Item集合中,不存储user_id。我遵循的方法是否正确?
如果我尝试将用户收藏夹作为User.last.favourites
或尝试将收藏夹添加到用户,则需要永远。这是为什么?
由于
答案 0 :(得分:0)
我相信您错过了embedded_in :user
班级的Item
答案 1 :(得分:0)
class User
include Mongoid::Document
has_many :favorites, class_name: "Item"
end
class Item
# class is all lower case
include Mongoid::Document
# remove the relation to the user form the item
# so that it cannot save the user_id
end
以前的代码应该可以使用,并且不允许您将user_id保存在收藏夹中。
所以此代码应该有效user.last.favorites #=> [Array of favorites]
但此代码将通过异常user.last.favorites.last.user #=> method user not found
也没有选择嵌入式解决方案,只能从父母那里访问嵌入式系列......我认为这不是你想要实现的......
用更简单的话说:如果你有一个被称为' rails'的喜爱, 使用其他答案中描述的嵌入式解决方案将导致以下行为p Favorites.all.to_a
#=> []
p user.first.favorites.first
#=> <Favorite id: 1, name: rails>
p user.last.favorites.first
#=> <Favorite id: 100, name: rails>
如果您注意到:
使用has_many
关系的相同代码将导致以下
p Favorites.all.to_a
#=> [<<Favorite id: 1, name: rails>]
p user.first.favorites.first
#=> <Favorite id: 1, name: rails>
p user.last.favorites.first
#=> <Favorite id: 1, name: rails>
# this is pseudocode but you will get the idea
user.last.favorites.first.name = `rails4` # then save
p user.first.favorites.first
#=> <Favorite id: 1, name: rails4>
p user.last.favorites.first
#=> <Favorite id: 1, name: rails4>