2009-04-18 14 views
18

this article'de açıklandığı gibi, bağlantılarda otomatik ilişkilendirmeler kullanıyorum. Örneğin, bir bölge nesnesi "country_id" yerine, bir ülke kimliğine sahipse: 1, "ülke" yi yapıyorum: "ABD". "USA", country.yml dosyasındaki bir etikettir, dolayısıyla fikstür, bunun nasıl yapıldığını bilir. Ancak, bu yalnızca, ülkeler nesnesinde bir ID değeri belirtmediğinizde çalışır. Bu yüzden ABD'nin kimliğini 1 olarak atayamıyorum. Ama eğer 1 olarak atamazsam, 8974343 gibi büyük bir değer ... ... ki bu biraz garip. Süper yüksek olmayan otomatik üretmek için fikstür almak için bir yolu var mı? .... ya da bu tamam mı?Raylardaki tutturmalarda otomatik ilişkilendirmeler

cevap

21

API belgelerini okurken, bu tam olarak nasıl kendiliğinden tutturulmuş demirbaşların nasıl davranması gerektiği - eğer önceden bir fikstür için belirli bir ID değerine sahip olmak istiyorsanız, muhtemelen bunu kendiniz atamanız gerekir.

Değilse, iyi, API dokümanlardan:

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. 
+0

Neden insanlar cevapları kabul ediyorlar, oy vermiyorlar? –

3
fikstürü id adını (karma doğrudan gelir

biz bizim kadar uzun, hiçbir şey yüklemeden herhangi fikstürü kimliğini keşfetmek nasıl" var etiketi okuyunuz ")

23

Bu, fikstür etiketinin otomatik olarak oluşturulmuş bir kimliğini nasıl alırsınız. Ben yorum için yeterli bir üne sahip olmadığından

Fixtures.identify(:reginald) 
+11

Bu SO makalesi bana çok yardımcı oldu, Rails 4.1.0.rc1 için bir güncelleştirme vermek istiyorum: <% = ActiveRecord :: FixtureSet.identify (: reginald)%> – Chris

+0

etiket belirtildi. http://ruby-journal.com/rails/define-fixtures-with-polymorphic-association/ – Shadoath

1

otomatik test için sabitleme bütünlüğünü zorla

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 
İlgili konular