وهو نمط سيء، نظرًا لأن find_by_name حساس لحالة الأحرف و create! ليس كذلك [1] لذا فإنه يخطئ مع ActiveRecord::RecordInvalid : Validation failed: Name has already been taken
يجب أن يكون هذا شيئًا مثل
tag = Tag.where('name ILIKE ?', tag_name).first || Tag.create!(name: tag_name)
لأن validates :name, presence: true, uniqueness: { case_sensitive: false }↩︎
لا يمكنني بالفعل إعادة إنتاجه باستخدام علامة وحدها.
لقد ارتكبت خطأً بسيطًا في منشوري الأصلي:
Tag.find_by_name غير حساس لحالة الأحرف (جيد) و Tag.find_by(name: ) حساس لحالة الأحرف (سيء).
هذا لأن ديفيد قام بالفعل بإصلاحه للعلامات قبل 7 سنوات عن طريق تجاوز طريقة find_by_name.
بالنسبة لـ TagGroup، لم يتم تطبيق هذا الإصلاح مطلقًا.