2009-04-18 7 views
18

Come descritto in this article, sto usando le associazioni automatiche nei dispositivi. Ad esempio, se un oggetto regione ha un ID paese, invece di fare "country_id": 1, faccio "country": "USA". "USA" è un'etichetta nel mio file countries.yml, quindi le fixture sanno come prendersene cura. Tuttavia, questo funziona solo quando non si specifica un valore ID per l'oggetto Paesi. Quindi non posso assegnare l'ID USA ad essere 1. Ma se non lo assegno ad essere 1, finisce per essere un grande valore 8974343 ... che è piuttosto strano. C'è un modo per ottenere proiettori per auto-generare id che non siano super-alti? .... o è ok?Associazioni automatiche in ruby ​​su dispositivi di binari

risposta

21

Leggendo la documentazione dell'API, questo è esattamente il modo in cui si suppone che i dispositivi autogenerati si comportino - se si desidera avere un valore ID specifico per una fixture in anticipo, probabilmente si dovrebbe semplicemente assegnarlo da soli.

caso contrario, beh, dalla documentazione 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. 
+0

Perché secondo voi le persone accettano le risposte ma non le votano? –

3

id del proiettore, viene direttamente da hashing suo nome (che è come "possiamo scoprire ID qualsiasi apparecchio senza caricare qualsiasi cosa, finché siamo conoscere l'etichetta ")

23

Ecco come si ottiene un id autogenerato dell'etichetta dell'apparecchio.

Fixtures.identify(:reginald) 
+11

Dato che questo articolo SO mi ha aiutato molto, vorrei dare un aggiornamento per Rails 4.1.0.rc1: <% = ActiveRecord :: FixtureSet.identify (: reginald)%> – Chris

+0

Ho dovuto includere la classe che il etichetta di riferimento. http://ruby-journal.com/rails/define-fixtures-with-polymorphic-association/ – Shadoath

1

test automatizzati per imporre l'integrità del dispositivo

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