Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将从mongoid查询构建的Ruby数组转换为实际的mongoid对象,或者重新编写方法以返回mongoid对象?_Ruby_Mongoid - Fatal编程技术网

将从mongoid查询构建的Ruby数组转换为实际的mongoid对象,或者重新编写方法以返回mongoid对象?

将从mongoid查询构建的Ruby数组转换为实际的mongoid对象,或者重新编写方法以返回mongoid对象?,ruby,mongoid,Ruby,Mongoid,我有一个名为Department的mongoid模型和一个名为User的单独模型,这两个模型之间没有本机关系。由于应用程序中的关系是如何工作的,我在用户模型上手动存储文档ID 我正在使用Ruby的Grape框架,它有一个过滤器系统,位于名为Entities的Mongoid对象之上,它拒绝任何不是Mongoid查询响应对象的东西,因为这个方法返回的是Ruby数组而不是Mongoid对象,所以我的框架会给我错误 有没有办法重写我的函数以返回Mongoid对象?或者有什么方法可以将Mongoid对象数

我有一个名为
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
##内部部门模型
自定义用户可以访问(用户=nil)
如果用户!=无
部门=[]
##部门访问密钥是属于用户的嵌入文档
user.department_access_key.each do| key|
departments返回用户已被授予访问权限的部门文档数组
其他的
raise“未定义用户”
结束
结束

我相信,“Mongoid对象”应该只是一个散列,所以这应该是可行的(也请注意
Enumerable.map
而不是phpish
每个{我相信,“Mongoid对象”应该只是一个散列,所以这应该是可行的(也请注意
Enumerable.map
而不是phpish
每个{你就不能像这样使用
find

departments = BACKBONE::Department.find(*user.department_access_keys.map(&:key))
我对
mongoid
不是很熟悉,但它似乎表明这正是实现您想要的目标的方法

标准#查找 按ID查找一个或多个文档。如果任何ID不匹配,默认情况下将引发错误

示例:

Band.find("4baa56f1230048567300485c")
Band.find(
  "4baa56f1230048567300485c",
  "4baa56f1230048567300485d"
)
Band.where(name: "Photek").find(
  "4baa56f1230048567300485c"
)

你不能像这样使用
find

departments = BACKBONE::Department.find(*user.department_access_keys.map(&:key))
我对
mongoid
不是很熟悉,但它似乎表明这正是实现您想要的目标的方法

标准#查找 按ID查找一个或多个文档。如果任何ID不匹配,默认情况下将引发错误

示例:

Band.find("4baa56f1230048567300485c")
Band.find(
  "4baa56f1230048567300485c",
  "4baa56f1230048567300485d"
)
Band.where(name: "Photek").find(
  "4baa56f1230048567300485c"
)

谢谢!我不知道为什么葡萄实体不接受数组,但这解决了我的问题!谢谢!我不知道葡萄实体为什么不接受数组,但这解决了我的问题!