سؤال

أنا بناء كتاب بسيطة تحقق من التطبيق. واحدة من الأشياء التي أحتاج إلى القيام بها هي تحديد ما إذا كان يتم فحص كتاب. لدي ارتباطات بين شعبي وإعداد فصول الكتب من خلال فئة Book_Check_out. هدفي هو استخدام خاصية CHECKED_OUT للكتاب لتحديد ما إذا كان يتم فحص الكتاب حاليا. ومع ذلك، في تطبيقي الحالي عندما لا يتم التحقق من كتاب وإنشار Book.checked_out.xxx الذي استقبله الخطأ "لديك كائن NIL عندما لا تتوقع ذلك!"هدفي هو استخدام book.checked_out لأغراض اثنين في بعض وجهات النظر تظهر أن نعم، يتم فحص هذا الكتاب وفي عرض وجهات النظر الأخرى الذي يتم سحبه حاليا إلى.

class Person < ActiveRecord::Base
  has_many :book_check_outs
  has_many :books, :through => :book_check_outs
end

class Book < ActiveRecord::Base

  has_many :book_check_outs
  has_many :people, :through => :book_check_outs

  def checked_out
    book_check_outs || false
  end
end

class BookCheckOut < ActiveRecord::Base
  belongs_to :book
  belongs_to :person
end
هل كانت مفيدة؟

المحلول

عندما تكون لديك نتيجة منطقية، يمكن أن يكون شيئا يمكن أن يكون صحيحا أو خطأ (على سبيل المثال، يمكن فحص الكتاب أم لا)، تحتاج إلى تحمل افتراضي للنتيجة. في هذه الحالة، يمكننا أن نفترض أنها خاطئة (لا يتم سحب الكتاب افتراضيا).

في نموذج الكتاب، أزل has_many: checked_out. خط وإنشاء طريقة بنفس الاسم:

def checked_out
  book_check_outs || false
end

هذه ينبغي إرجاع إما الفرسان، أو إذا لم يكن هناك شيء مرتبط بالمثيل، خطأ. يمنحك طريقة سريعة وسهلة ومفانقة للتحقق من ارتباط وإزالة خطأ كائن NIL NIL.

يحرر يمكنك أيضا إرجاع True أو False، وعدم إرجاع أحدث تسجيل الخروج عن طريق التحقق من أن Book_Check_outs هو لا شيء أو لا. يوفر القضبان طريقة تسمى فارغة؟ الذي يدعو كل شيء لا شيء؟ و فارغ؟

def checked_out
  !book_check_outs.blank?
end

أنا أحب روبي :)

نصائح أخرى

نسيت إذا كان يهم في الواقع أم لا، ولكن من أجل الوضوح قد ترغب في وضع علاقة has_many أعلى has_many: من خلال العلاقة.

أنا أيضا لست متأكدا من أنك يجب أن تعلن في فئة الكتاب أنه Has_many: Bookcheckouts و IT Has_One: Checked_out، منذ Checked_out فعلا هو مرتبة كتب تعرفها لها الكثير من أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top