سؤال

وأنا أحاول أن إنشاء named_scope يستخدم الانضمام، ولكن على الرغم من أن SQL ولدت يبدو الصحيح، والنتيجة هي القمامة. على سبيل المثال:

class Clip < ActiveRecord::Base      
  named_scope :visible, {
    :joins => "INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id", 
    :conditions=>"shows.visible = 1 AND clips.owner_type = 'Series' "
  }

و(المملوكة مقطع من مسلسل، مسلسل ينتمي إلى مشاهدة، يمكن مشاهدة تكون مرئية أو غير مرئية).

وClip.all يفعل:

SELECT * FROM `clips` 

وClip.visible.all يفعل:

SELECT * FROM `clips` INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id WHERE (shows.visible = 1 AND clips.owner_type = 'Series' ) 

وهذا يبدو بخير. ولكن مجموعة الناتجة من النماذج كليب يتضمن كليب مع ID هذا ليس في قاعدة البيانات - انها التقطت ID عرض بدلا من ذلك. أين أنا ذاهب خطأ؟

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

المحلول

والمشكلة هي أن "SELECT *" - الاستعلام تلتقط كافة الأعمدة من لقطات، سلسلة، والعروض، في هذا النظام. كل جدول يحتوي على عمود الهوية، والنتيجة في الصراعات بين الأعمدة وردت أسماؤهم في النتائج. سحب العمود معرف الماضي الظهر (من المعارض) يتجاوز واحد تريد. يجب أن تكون باستخدام: حدد الخيار مع: وينضم، مثل:

named_scope :visible, {
  :select => "episodes.*",
  :joins => "INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id", 
  :conditions=>"shows.visible = 1 AND clips.owner_type = 'Series' "
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top