القضبان: ActiveResource - هل يمكنني تعيين معرف بشكل واضح؟

StackOverflow https://stackoverflow.com/questions/602162

سؤال

وأستخدمه ActiveResource في القضبان لإدارة الكيانات في قاعدة بيانات منفصلة على REST.

ولقد سعيت لإدارة صراحة معرفات الموارد البعيدة، أما بالنسبة للحالة الراهنة هو أبسط لمجرد إعادة استخدام معرف الموارد المحلية، بدلا من الحفاظ على مجال مختلف.

للأسف لم أكن قادرة على الحصول على هذا العمل باعتباره رمز لnew? في ActiveResource::Base هو

  def new?
    id.nil?
  end

ووsave هو

 def save
   new? ? create : update
 end

وهكذا من ذلك عن طريق تعريف أنه من المستحيل تحديد هوية مورد وحفظه كمورد جديد.

وcreate وupdate محمية الأساليب، حتى لو كنت اخترق رمز ActiveResource :: قاعدة ربما التي من شأنها أن تجعل من العمل، ولكن أنا تكره أن تفعل ذلك.

هل هناك طريقة صحيحة للقيام بذلك؟ أو هو ما أحاول القيام به فقط سيئة، وأنا لا ينبغي أن نفعل ذلك؟

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

المحلول

وأنت تعمل ضد نوايا ActiveResource. يوفر ActiveResource واجهة للراحة خدمات ويب، الذي من اتفاقية إعادة تعيين ID عندما لا إنشاء.

ومع ذلك، إذا كنت السيطرة على الموارد التي تستخدمها، وقمت بتعديل سلوكها لاتخاذ ID عند حفظ رقما قياسيا جديدا، هل يمكن تعديل ActiveResource :: قاعدة لتتوافق. انها حقا ليس من غير المألوف للناس في القضبان لجعل الإضافات والتغييرات في فئات قاعدة. عليك فقط وضع التصحيح الخاص بك في ليب وإدراجه في مكان ما في الاشياء بدء التشغيل.

وأنا لا أعتقد أنها فكرة جيدة، بالضرورة، ولكن كان ذلك ممكنا. :)

نصائح أخرى

في القضبان الجديدة (اختبار 2.3.2) معرف يمكن تعيين، وتوفير المنطق قد تغيرت قليلا (الآن سجلات لها منطقيةnewrecord المجال للقضاء على هذا id.nil؟).

record = Model.new
record.id = 123
record.save!
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top