الحصول على NameError مع ActiveRecord والعلاقات
-
03-07-2019 - |
سؤال
لقد واجهت مشكلة عند استخدام واحدة من العديد من العلاقة.أريد أن يكون كل سلسلة واحدة الناشر أن ناشر واحد لديه العديد من المسلسلات.
هذا هو بلدي الناشر نموذج:
class Publisher < ActiveRecord::Base
validates_presence_of :name
has_many :series
end
هذا هو بلدي دوري الدرجة الاولى الايطالي نموذج:
class Serie < ActiveRecord::Base
belongs_to :publisher
end
هذا هو الفشل في الاختبار:
test "a publisher should have a list of series" do
@publisher = Publisher.new :name => "Standaard Uitgeverij"
@series = [ Serie.new(:name => "De avonturen van Urbanus", :publisher => @publisher),
Serie.new(:name => "Suske en Wiske", :publisher => @publisher) ]
assert_equal @series, @publisher.series
end
فشل الاختبار على السطر الأخير مع NameError:غير مهيأ ثابت الناشر::سلسلة.
حاولت حفظ الناشر سلسلة, ولكن هذا لم ينجح.حاولت ذلك مع واحد فقط في دوري الدرجة الاولى الايطالي, ولكن هذا يعطي نفس الخطأ.
أنا منذ بدأت للتو مع القضبان روبي, أنا في حيرة هنا.ما الخطأ الذي فعلته ؟
المحلول
إلى العنوان الخاص بك الفعلية السؤال كما ذكرت في تعليقك (كيف يمكنني أن أسمي نموذج "سلسلة"?) تحتاج إلى جعل القضبان' Inflector على بينة من هذا الاستثناء إلى default pluralization القواعد.
أضف التالي إلى config/environment.rb
:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable 'series'
end
هذا سوف تتيح لك اسم النموذج الخاص بك كما Series
.يمكنك اختبار ذلك انها عملت باستخدام script/console
:
>> "series".pluralize #=> "series"
>> "series".singularize #=> "series"
—أود أن أقول أنني حاولت فقط باستخدام على Pluralizer ويبدو أن القضبان لديه المعرفة في كيفية التعامل مع كلمة سلسلة المدمج في. انها محاولة لنفسك.
نصائح أخرى
وأعتقد أن الجواب جون هو أفضل واحد.
ويمكنك أيضا تحديد مباشرة اسم الفئة في الإعلان has_many
has_many :series, :class_name => 'Serie'
واسمك العلاقة has_many على ما يرام، ولكن اسم النموذج الخاص بك غير صحيح.
وأما الجمع المفرد ومن سلسلة كلاهما السلسلة، تحتاج إلى إعادة تسمية النموذج الخاص بك من دوري الدرجة الاولى الايطالي لسلسلة. بعد ذلك، يجب أن يكون كل شيء على ما يرام.