Ruby On Rails منع خطأ NIL عند افتراض أنه قد لا يوجد سجل
-
12-09-2019 - |
سؤال
أنا بناء كتاب بسيطة تحقق من التطبيق. واحدة من الأشياء التي أحتاج إلى القيام بها هي تحديد ما إذا كان يتم فحص كتاب. لدي ارتباطات بين شعبي وإعداد فصول الكتب من خلال فئة 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 فعلا هو مرتبة كتب تعرفها لها الكثير من أعلاه.