لماذا لا تعمل متغيرات مثيل وحدة التحكم الخاصة بي في وجهات النظر (القضبان)
-
06-07-2019 - |
سؤال
أرغب في إضافة اثنين من متغيرات المثيل إلى وحدة التحكم الخاصة بي ، لأن المتغيرات المعنية مطلوبة من داخل أكثر من عرض إجراء واحد. ومع ذلك ، فإن المثال أدناه لا يعمل كما أتوقع.
class ExampleController < ApplicationController
@var1 = "Cheese"
@var2 = "Tomato"
def show_pizza_topping
# What I want is the above instance vars from within the view here
end
def show_sandwich_filling
# What I want is the above instance vars from within the view here
end
end
كما أفهمها ، يأخذ Rails متغيرات المثيل من وحدة التحكم ويجعلها متوفرة في العرض. إذا قمت بتعيين نفس المتغيرات ضمن طرق الإجراء ، فهي تعمل بشكل جيد - لكنني لا أريد أن أفعل ذلك مرتين. لماذا لا تعمل طريقتي؟
(ملاحظة: هذا مثال على القمامة ، لكنني آمل أن يكون ذلك منطقيًا)
تحرير: لقد وجدت إجابة لهذا السؤال هنا: متى يتم تعيين متغيرات مثيل Ruby؟
تحرير 2: ما هو أفضل وقت لاستخدام المرشحات مثل Quaret_Filter وطريقة التهيئة؟
المحلول
يجب التعامل مع هذه الأنواع من الأشياء في before_filter
. قبل أن يرشح المرشح ، كما يوحي الاسم ، طريقة سيتم استدعاؤها قبل أي إجراءات ، أو فقط الإجراءات التي تعلن. مثال:
class ExampleController < ApplicationController
before_filter :set_toppings
def show_pizza_topping
# What I want is the above instance vars from within the view here
end
def show_sandwich_filling
# What I want is the above instance vars from within the view here
end
protected
def set_toppings
@var1 = "Cheese"
@var2 = "Tomato"
end
end
أو ، يمكن أن يكون لديك قبل_filter فقط العمل على أحد أفعالك
before_filter :set_toppings, :only => [ :show_pizza_topping ]
أتمنى أن يساعدك هذا.
تحرير: إليك المزيد من المعلومات حول المرشحات في ActionController.
نصائح أخرى
هذه ليست متغيرات مثيل ، أليس كذلك؟
class A
@x = 5
def f
puts @x
end
end
A.new.f
=> nil
أنت تحددها على مستوى الفصل ، وليس على مستوى المثيل. كما يشير "theiv" ، تحتاج إلى تعيينها داخل طريقة مثيل.