جمعيات أوتوماتيكية في Ruby على تركيبات القضبان

StackOverflow https://stackoverflow.com/questions/763881

  •  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:

http://edgeapi.rubyonrainaRails.org/classes/activerecord/fiTureset.html#class-activerycord :::FiTSet-Label-Fixture+Label+interPolation.

تحت تركيب الاستيفاء التسمية:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top