سؤال

لقد حصلت على النماذج التالية:

المشروع.rb

has_many :tasks

المهمة.rb

belongs_to :project
has_many :assignments
has_many :users, :through => :assignments

المستخدم.rb

has_many :assignments
has_many :tasks, :through => :assignments

الاحالة.rb

belongs_to :task
belongs_to :user

لذلك على سبيل المثال: المشروع.أولا.عنوان #=> "مانهاتن" المشروع.أولا.المهام.خريطة(&:اسم) # => ['تجد العلماء', 'العثور على المال', 'العثور على موقع'] المشروع.أولا.المهام.أولا.المستخدمين.خريطة(&:full_name) #=> ['جيمس ماكسويل', 'Evariste جالويس', 'جول فيرن']

سؤالي الأول هو: كيف يمكنني العثور على جميع الأشخاص أسماء ربما مع رمز بروك في طلقة واحدة ، حاولت:

Project.first.tasks.users.full_name #=> AND FAILED Project.first.tasks.map(&:users).full_name #=> AND FAILED Project.first.tasks.map(&:users).map(&:full_name) #=> AND FAILED

أي أفكار ؟

و أعتقد أن هذا السؤال التالي قد يكون في نفس الكرة الحديقة:

كيف يمكنني أن أفعل تجد من المشروع مع ظروف البحث في 'full_name' السمة المستخدمين لها المهام ؟

على سبيل المثال

Project.all(:include => {:tasks => :users}, :conditions => ['tasks.users.full_name LIKE ?', query]) #this failed

أعتقد أن المشكلة هي في 'المهام.المستخدمين.

شكرا للجميع, سعيد عيد الشكر!

هل كانت مفيدة؟

المحلول

أول واحد سوف تريد أن تفعل شيئا مثل هذا:

Project.first.tasks.map { |t| t.users.map(&:full_name) }.flatten

والسبب في ذلك هو أن كنت ترغب في تكرار خلال كافة المهام ثم جميع المستخدمين في كل مهمة.دون تسطيح هذا من شأنه أن يعطي لك مجموعة 2 الأبعاد.

وعلى الثاني واحدة تجد ينبغي أن يكون:

Project.all(:include => {:tasks => :users}, :conditions => ['users.full_name LIKE ?', query])

الكتابة users.full_name يعني مشغل SQL التي كنت تبحث عن full_name الميدانية على users الجدول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top