我有一个名为Department
的mongoid模型和一个名为User
的单独模型,两个模型之间没有本机关系。由于我的应用程序中的关系如何工作,我手动将文档ID存储在用户模型上。
我正在使用Ruby的Grape
框架,它有一个位于名为Entities
的Mongoid对象之上的过滤系统,它拒绝任何不是mongoid查询响应对象的东西,因为这个方法返回一个ruby数组而不是一个Mongoid对象,我的框架给了我错误。
有没有办法重写我的函数来返回一个Mongoid对象?或者有什么办法可以将一个Mongoid对象数组转换成一个Mongoid对象吗?
## inside Department Model
def self.user_can_access(user = nil)
if user != nil
departments = []
## department_access_keys are embedded documents belonging to a user
user.department_access_keys.each do |key|
departments << BACKBONE::Department.find(key.key)
end
departments ## => returns an array of Department Documents that a user has been granted access to
else
raise 'user was not defined'
end
end
答案 0 :(得分:2)
我相信,“Mongoid对象”应该只是一个哈希,所以这应该有用(也请注意Enumerable.map
而不是phpish each { << }
):
## inside Department Model
def self.user_can_access(user = nil)
raise 'user was not defined' if user.nil?
{
departments: # return hash here
user.department_access_keys.map do |key|
BACKBONE::Department.find(key.key)
end
}
end
答案 1 :(得分:0)
你不能像这样使用find
吗?
departments = BACKBONE::Department.find(*user.department_access_keys.map(&:key))
我对mongoid
不是很熟悉,但documentation似乎表明这正是如何实现你想要的。
标准#找到 通过ID查找文档或多个文档。如果任何ID不匹配,默认情况下会引发错误。
<强>示例:强>
Band.find("4baa56f1230048567300485c")
Band.find(
"4baa56f1230048567300485c",
"4baa56f1230048567300485d"
)
Band.where(name: "Photek").find(
"4baa56f1230048567300485c"
)