الوصول إلى المعلمة داخل البرنامج المساعد
-
13-09-2019 - |
سؤال
أحاول تعديل البرنامج المساعد Vestal_Versions لقبول معلمة قمت بتعيينها عند الحفظ. ستكون هذه المعلمة بمثابة علامة جديدة لتحديد وقت إنشاء مراجعة عند التحديث. حاليا سوف تعمل دائما عند التحديث عند حاجة مراجعة جديدة. هنا هي المنطقة المصابة من رمز البرنامج المساعد غير المصقول:
after_update :create_version, :if => :needs_version?
def create_version
versions.create(:changes => changes.slice(*versioned_columns), :number => (last_version + 1))
reset_version
end
المعلمة التي أرسلها في العرض عند إرسالها هي "forcerevision = n". كيف يمكنني سحب هذه المعلمة وما هو مشروطا الذي أستخدمه للسماح لهذا بتشغيل فقط عندما "forcerevision = y"؟ يبدو أنه سيكون نظافة لتعديل مرشح ما بعد _UPDATE؟
هنا هو سجل البيانات التي يتم تمريرها على التحديث.
Processing NotesController#update (for 521.0.0.1 at 2009-12-05 13:25:45) [PUT]
Parameters: {"authenticity_token"=>"#########################+k=", "id"=>"4", "forcerevision"=>"n", "note"=>{"notebook_id"=>"", "public"=>"n", "body"=>"A versioned note", "title"=>"Version Note Test", "flag"=>"important", "star"=>"false", "tag_list"=>""}}
المحلول
إن أنظف طريقة للقيام بذلك ستكون لإضافة attr_accessor عند إعلان إصدار نموذج.
ثم تجاوز Tesult_Version؟ للتحقق من هذه السمة.
في أي مكان في LaserLemon :: vestalversions :: classmethods # إصدار الصورة إضافة هذا الخط:
attr_accessor :force_reversion
ثم أعد كتابة LaserLemon :: vestalversions :: instancemethods # leseases_version؟ للتحقق من هذه السمة:
nb بسبب طريقة معالجة خانات الاختيار "0" تعتبر خاطئة لصناديق الاختيار، وحقول المنطقية، ولكنها قيمة حقيقية في Ruby. لذلك لا يمكننا فقط التحقق مما إذا كان force_reversion لا يقيم إلى false.
def needs_version?
!(versioned_columns & changed).empty? ||
![nil, "0", 0, false].include?(force_reversion)
end
وأنت كل مجموعة. فقط اجتياز أي قيمة ل force_reversion كما لو كان عمود.
بعد التغييرات أعلاه مع النموذج التالي:
مستخدم الطبقة
@user.update_attributes(:force_reversion => true, :unversioned_column => new_value)
أو في شكل:
<%= form_for @user do |f| %>
<%= f.label :force_reversion, "Force New Version" %>
<%= f.check_box :force_reversion %>
... More fields ...
<% end %>