2009-04-18 16 views
18

Zgodnie z opisem w this article używam automatycznych powiązań w urządzeniach. Na przykład, jeśli region ma identyfikator kraju, zamiast "country_id": 1, robię "country": "USA". "USA" jest etykietą w moim pliku countries.yml, więc urządzenia wie, jak się tym zająć. Działa to jednak tylko wtedy, gdy nie podasz wartości ID dla obiektu krajów. Więc nie mogę przypisać ID USA na 1. Ale jeśli nie przypiszemy, że jest to 1, to kończy się to jakąś dużą wartością 8974343 ... co jest dość dziwne. Czy istnieje sposób na to, aby urządzenia automatycznie generowały identyfikatory, które nie są zbyt wysokie? .... czy to w porządku?Automatyczne skojarzenia w urządzeniach ruby ​​na szynach

Odpowiedz

21

Czytając dokumentację API, to jest dokładnie to, jak powinny wyglądać urządzenia generowane przez autogenerację - jeśli chcesz mieć wcześniej określoną wartość identyfikatora dla urządzenia, prawdopodobnie powinieneś go po prostu przydzielić.

Jeśli nie, dobrze, z docs 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

Dlaczego uważasz, że ludzie akceptują odpowiedzi, ale nie głosują na nie? –

3

id wygląd oprawy pochodzi bezpośrednio od mieszania swoją nazwę (to jak „możemy odkryć identyfikator każdego Spotkań bez ładowania czegokolwiek, tak długo, jak znać etykietę ")

23

W ten sposób otrzymasz automatycznie wygenerowany identyfikator etykiety urządzenia.

Fixtures.identify(:reginald) 
+11

Ponieważ niniejszy artykuł bardzo mi pomógł, chciałbym podać aktualizację dla Rails 4.1.0.rc1: <% = ActiveRecord :: FixtureSet.identify (: reginald)%> – Chris

+0

Musiałem uwzględnić klasę, która etykieta, o której mowa. http://ruby-journal.com/rails/define-fixtures-with-polymorphic-association/ – Shadoath

1

do zautomatyzowanego testu wymuszenie integralności urządzenia

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 
Powiązane problemy