جمعيات أوتوماتيكية في Ruby على تركيبات القضبان
-
11-09-2019 - |
سؤال
كما هو موضح في هذه المقالة, ، أنا أستخدم الجمعيات التلقائية في المباريات. على سبيل المثال، إذا كان لدى كائن المنطقة معرف قطري، فبدلا من القيام "الريفي_ID": 1، أفعل "الدولة": "الولايات المتحدة الأمريكية". "الولايات المتحدة الأمريكية" هي تسمية في ملفاتي .كم، لذلك تعرف تركيبات كيفية رعاية هذا ومع ذلك، يعمل هذا فقط عندما لا تحدد قيمة معرف لكائن البلدان. لذلك لا يمكنني تعيين معرف USA ليكون 1. ولكن إذا لم أقم بتعيينه ليكون 1، فهو ينتهي كونه بعض القيمة الكبيرة 8974343 ... وهو كيندا غريب. هل هناك طريقة للحصول على تركيبات معرف توليد تلقائي غير مرتفعة للغاية؟ .... أم أن هذا موافق؟
المحلول
قراءة وثائق API، هذا هو بالضبط كيفية من المفترض أن تتصرف التركيبات البحريية - إذا كنت ترغب في الحصول على قيمة معرفية محددة لتركيب مسبقا، فربما يجب عليك تعيينها بنفسك.
إذا لم يكن كذلك، حسنا، من مستندات API:
The generated ID for a given label is constant, so we can discover any fixture‘s ID without loading anything, as long as we know the label.
نصائح أخرى
هذه هي الطريقة التي تحصل عليها معرف البحري لتسمية اللاستردادية.
Fixtures.identify(:reginald)
نظرا لأنني ليس لدي سمعة كافية للتعليق، فهذه هي الوثائق الفعلية 4.1:
تحت تركيب الاستيفاء التسمية:
monkey_id: <%= ActiveRecord::FixtureSet.identify(:reginald) %>
pirate_id: <%= ActiveRecord::FixtureSet.identify(:george) %>
يأتي معرف Fixture مباشرة من التجزئة باسمه (هذا هو كيف "يمكننا اكتشاف أي معرف لاعبا اساسيا دون تحميل أي شيء، طالما أننا نعرف الملصق")
اختبار آلي لفرض سلامة تركيبات
class FixtureIntegrityTest < ActiveSupport::TestCase
context "fixture integrity" do
should "work" do
fixtures = Dir["test/fixtures/*.yml"].map do |file|
[file, File.basename(file).sub(/\..*/, "").singularize, YAML.load(ERB.new(File.read(file)).result)]
end
failures = fixtures.reject(&:last).map { |file,*| "#{file} is empty!"}
failures = failures.presence || fixtures.map do |_, klass, content|
content.select{ |_,fixture| fixture["id"] }.map do |name, _|
fixtures.map do |file, _, content|
content.select { |_,fixture| fixture[klass] == name }.map do |_, fixture|
"#{file} uses #{klass}: #{name}, but should use the id!"
end
end
end
end.flatten.compact
assert_equal [], failures
end
end
end