سؤال

لدي النطاق التالي المسمى:

named_scope :find_all_that_match_tag, lambda { |tags| {
            :select => "articles.id, tags.name",
            :joins => :tags,
            :conditions => ["tags.name IN (?)",tags]}
          }

إنه يعمل بشكل جيد مثل هذا في البرنامج النصي/وحدة التحكم

Article.find_all_that_match_tag(["cooking"])

ولكن إذا استخدمته مثل هذا ، كجزء من نطاق مجهول

scope = Article.scoped({})
scope = scope.scoped.find_all_that_match_tag(["cooking"])

أحصل على تحذير ، على السطر الثاني:

/Users/Server/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/named_scope.rb:13: warning: multiple values for a block parameter (0 for 1)
from /Users/Server/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/named_scope.rb:92

لا يزال يعمل ، ولكن ما الذي يسبب التحذير؟ وكيف أتخلص منه من فضلك؟

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

المحلول

بادئ ذي بدء ، ربما لا أزعجني بما في ذلك نطاق مجهول بدون شروط.

بعد قولي هذا ، أعتقد أن التحذير في دعوة إلى النطاق كجزء من السلسلة بدون حجة. لا ينبغي أن يكون ذلك ضروريًا ، لديك نطاق مسمى "find_all_that_match" يجب أن تكون قادرًا على التسلسل ببساطة إلى أي نطاقات سابقة ، مجهول أو تسمي.

scope = Article.scoped({})
scope.find_all_that_match_tag(["cooking"])

قد يكون من المفيد أيضًا استخدام نطاق أقصر اسمه "Tagged_As" أو ببساطة "الموسومة"

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