سؤال

أحاول تعديل البرنامج المساعد 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"=>""}}

vestal_versions على github.

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

المحلول

إن أنظف طريقة للقيام بذلك ستكون لإضافة 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 %>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top