ruby on rails - تخطي before_filter في القضبان




ruby-on-rails inheritance (3)

الجوابان المقدمان هما نصف صحيح. لتجنب إتاحة جميع إجراءات الكلاب الخاصة بك ، تحتاج إلى تأهيل skip_before_filter للتطبيق فقط على إجراء "show" كما يلي:

class Dog < Animal
  skip_before_filter :authenticate, :only => :show
end

تم تبسيط الأسماء والأشياء من أجل الوضوح. المفهوم الأساسي لا يزال هو نفسه.

لدي ثلاث وحدات تحكم: dog ، cat ، horse . ترث هذه وحدات التحكم كافة من animal وحدة التحكم. في وحدة التحكم ، لدي عامل تصفية قبل مصادقة مستخدم على هذا النحو:

before_filter :authenticate

def authenticate
  authenticate_or_request_with_http_basic do |name, password|
    name == "foo" && password == "bar"
  end
end

في show العمل الخاص dog ، أحتاج إلى وصول مفتوح لجميع المستخدمين (تخطي المصادقة).

إذا كنت سأكتب المصادقة بشكل منفصل عن dog ، يمكنني فعل شيء كالتالي:

before_filter :authenticate, :except => :show

ولكن بما أن dog يرث من animal ، لا أستطيع الوصول إلى الإجراءات الخاصة بالتحكم. مضيفا :except => :show في وحدة تحكم animal تخطي المصادقة فقط لعمل show dog ، ولكن أيضا من cat horse . هذا السلوك غير مرغوب فيه.

كيف يمكنني تخطي المصادقة فقط لعمل show dog بينما لا يزال يرث من animal ؟


لهذا يمكنك استخدام skip_before_filter

تم شرحه في واجهة برمجة تطبيقات Rails

في dog الخاص بك المثال فقط يجب أن تحتوي

skip_before_filter :authenticate

class Dog < Animal
  skip_before_filter :authenticate, :only => :show
end

انظر ActionController::Filters::ClassMethods لمزيد من المعلومات عن الفلاتر والميراث.





before-filter