سؤال

لقد واجهت مشكلة عند استخدام واحدة من العديد من العلاقة.أريد أن يكون كل سلسلة واحدة الناشر أن ناشر واحد لديه العديد من المسلسلات.

هذا هو بلدي الناشر نموذج:

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 على ما يرام، ولكن اسم النموذج الخاص بك غير صحيح.

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

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