与mongoid的proc联合

时间:2016-08-01 08:07:22

标签: ruby-on-rails ruby mongodb sinatra mongoid

我在Mongoid的消息来源中看到没有proc可以发送到关联方法,在与Mongoid的AR关联下实现的最佳实践是什么:

class Task
  ...

  belongs_to :creator, ->{where(type: :manager)}, class_name: "User"
  belongs_to :acceptor, ->{where(type: :acceptor)}, class_name: "User"
end

2 个答案:

答案 0 :(得分:0)

我似乎找到了答案。 Mongoid中的关系方法接受块作为第三个参数。

  belongs_to :creator, class_name: "User", inverse_of: :created_tasks do
    ->{ where(type: :manager)}
  end

 belongs_to :executor, class_name: "User", inverse_of: :accepted_tasks do
   ->{where(type: :acceptor)}
 end

答案 1 :(得分:0)

至少对于has_many关系,我一直在使用mongo中的默认过滤器来解决这个问题,所以我想知道您的答案是否实际上适用于belongs_to。在has_many方面,这对我来说一直是正确的,因此我认为这对其他人也可能是一个有用的答案:

 belongs_to :user do
   def creator
     where(type: :manager)}
   end

   def executor
     where(type: :acceptor)
   end
 end

然后可以通过说task.user.acceptedtask.user.created等来访问它们,但是我一直无法弄清楚如何为整体关系实际设置默认过滤。