Rails: لا يمكن أن يكون هناك نطاق يسمى "عام" بعد الآن باستخدام الإصدار 4.1 من ريلز؟

تم إنشاؤها على ٩ مايو ٢٠١٤  ·  3تعليقات  ·  مصدر: rails/rails

على ريلز 4.1 ، النموذج التالي

class Product < ActiveRecord::Base
  scope :public, where(true)
end

يعطيني هذا الخطأ:

ArgumentError: You tried to define a scope named "public" on the model "Product", but Active Record already defined a class method with the same name.
    from /usr/local/stow/ruby-2.1.1-gh-2014.3.18/lib/ruby/gems/2.1.0/gems/activerecord-4.1.1/lib/active_record/scoping/named.rb:143:in `scope'
    from /tmp/scope/app/models/product.rb:2:in `<class:Product>'
    from /tmp/scope/app/models/product.rb:1:in `<top (required)>'

لا يوجد خطأ في الإصدار 4.0.5 من ريلز. هل هذا تغيير مقصود في الإصدار 4.1؟

أرى أن هذا Module.public موجود http://ruby-doc.org/core-2.1.1/Module.html#method -i-public

irb(main):001:0> Product.method(:public)
=> #<Method: Class(Module)#public>

التعليق الأكثر فائدة

نعم ، هذا شيء جديد على ريلز 4.1. لطالما كانت هذه النطاقات ذات الأسماء "المحجوزة" إشكالية وسببًا للعديد من الأخطاء الدقيقة ، لذلك قررنا أن نفشل بصوت عالٍ بدلاً من ذلك.

في هذه الحالة ، يكون التعارض مع الطريقة Module.public كما اقترحت. من خلال تحديد نطاق يسمى public ، فإنه سيضيف طريقة فئة تسمى public إلى فئة النموذج ، والتي تتجاوز تلك الموجودة في Module طرق رؤية طرق التحكم.

ال 3 كومينتر

نعم ، إنه متعمد. انظر # 14582 و 7e8e91c الأخير لمزيد من التفاصيل.

تضمين التغريدة

نعم ، هذا شيء جديد على ريلز 4.1. لطالما كانت هذه النطاقات ذات الأسماء "المحجوزة" إشكالية وسببًا للعديد من الأخطاء الدقيقة ، لذلك قررنا أن نفشل بصوت عالٍ بدلاً من ذلك.

في هذه الحالة ، يكون التعارض مع الطريقة Module.public كما اقترحت. من خلال تحديد نطاق يسمى public ، فإنه سيضيف طريقة فئة تسمى public إلى فئة النموذج ، والتي تتجاوز تلك الموجودة في Module طرق رؤية طرق التحكم.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات