0

私はMongoidを使用しており、プロジェクトとユーザーモデルがあります。プロジェクトモデルには、フィールドがあります

class Project
  include Mongoid::Document
  field :name
  field :user_ids, :type => Array
end

class User
  include Mongoid::Document
  field :email
end

1つのプロジェクトに属するすべてのユーザーを見つけることができます。つまり、「このプロジェクトのユーザーを見つける」

@project  = Project.first # => 'Housework'
User.criteria.id(@project.user_ids) # => ['Bart','Lisa','Maggie']

しかし、1人のユーザーに属するすべてのプロジェクトを見つけるのに少し問題があります。つまり、「このユーザーのプロジェクトを見つける」

@user = User.first   # => 'Bart'
Project.where(:user_ids => @user.id) # doesn't work
Project.where(:user_ids.includes => @user.id) # not such method
Project.where(:user_ids => [@user.id]) # doesn't make sense to compare arrays, but tried anyway and doesn't work

Userモデルにproject_idsを格納するための別のフィールドを含めることができることは知っていますが、喜んでそうしますが、興味があるのは、#includesと同様に機能するファインダー条件で使用する方法がありますか?ルビーで?

4

1 に答える 1

0

私はこれに対する解決策を見つけました。これはall_inファインダーメソッドです

例:

Fruit.all[0].colors = ['red','green','blue'] #=> apple
Fruit.all[1].colors = ['yellow','green']     #=> banana

Fruit.all[2].colors = ['red', 'yellow']      #=> pineapple

'colors'配列フィールドに赤色の果物をすべて見つけるには、次のクエリを実行できます。

Fruit.all_in(:colors => ['red'])

=> [アップル、パイナップル]

于 2010-08-28T19:42:26.117 に答える