2014-03-04 7 views
5

Es gibt das folgende Werk:factory attributes_for mit Verbänden

factory :car do 
    name 'Some car' 
    engine_value 1.6 
    color '#ff0000' 
    car_type 
    engine_type 
    transmission 
    drive_type 
    material 
end 

Wie Sie dort sehen eine Menge von zugeordneten Objekten sind. Aber Code

attributes_for(:car) 

generiert nur :name=>"Some car", :engine_value=>1.6, :color=>"#ff0000"} Hash. Ich muss einen Hash mit allen Attributen erhalten. Wie kann ich es tun? Vielen Dank.

+0

mögliches Duplikat von [FactoryGirl: Warum Attribute \ _für einige Attribute weglassen?] (Http://stackoverflow.com/questions/10290286/factorygirl-why-does-attributes-for-omit-some-attributes) – Chowlett

+0

Siehe auch: http://stackoverflow.com/questions/5103572/factorygirl-attributes-for-not-giving-me-associated-attributes –

Antwort

11

Ich habe in das gleiche Problem laufen und ich habe für mich

hoffte, das hilft

so etwas wie

build(:car).attributes 

Nicht sicher, ob dies der beste Weg, es zu tun ist, aber es funktioniert verwendet

0

Sie können die Attribute id, created_at und updated_at auslassen.

FactoryGirl.build(:car).attributes.except('id', 'created_at', 'updated_at')

Wenn benötigen Sie die Tasten Symbole zu sein (wie in den von attributes_for erzeugten Schlüssel):

FactoryGirl.build(:car).attributes.except('id', 'created_at', 'updated_at').symbolize_keys

Einschränkungen:

  • Es erzeugt keine Attribute für HMT- und HABTM-Zuordnungen (da diese Zuordnungen in einer Join-Tabelle gespeichert sind, kein tatsächliches Attribut).
  • Assoziationsstrategie in der Fabrik muss create sein, wie in association :user, strategy: :create. Diese Strategie kann Ihre Fabrik sehr langsam machen, wenn Sie sie nicht klug einsetzen.