Factory_bot: Utilisation d'usines ayant plusieurs associations au même modèle

Créé le 18 mai 2012  ·  6Commentaires  ·  Source: thoughtbot/factory_bot

J'utilise Ruby on Rails 3.2.2, FactoryGirl 3.1.0 et FactoryGirlRails 3.1.0. J'ai un modèle qui a deux associations à un autre modèle :

class Article < ActiveRecord::Base
  belongs_to a_users, :class_name  => 'User'
  belongs_to b_users, :class_name  => 'User'
end

Dans mon fichier d'usine j'ai :

factory :article, :class => Article do
  title "Sample title"

  association :a_users, factory: :user
  association :b_users, factory: :user
end

En utilisant le code ci-dessus, cela créera deux utilisateurs, mais _J'aimerais que les deux associations aient le même utilisateur_ (sans créer plusieurs utilisateurs). Comment puis-je faire cela?

Commentaire le plus utile

Je pense que tu pourrais faire :

factory :article do
  title 'Sample title'

  association :a_users, factory: :user
  b_users { a_users }
end

Faites-moi savoir comment cela se passe!

Tous les 6 commentaires

Je pense que tu pourrais faire :

factory :article do
  title 'Sample title'

  association :a_users, factory: :user
  b_users { a_users }
end

Faites-moi savoir comment cela se passe!

Salut j'ai une question similaire. J'utilise mongoid. Mon scénario est,

class User
  include Mongoid::Document
  has_many :events
end

class Event
  include Mongoid::Document
  has_many :speeches
end

class Speech
  include Mongoid::Document
  belongs_to :event
  belongs_to :user
end

J'ai essayé,

FactoryGirl.define do
  factory :organizer, class: User do
    events {|events| [events.association(:published_event)]}
  end

  factory :event, class: Event do
    name 'Published event'
    ...
    factory :published_event do
      published true
      speeches {|event| [event.association(:speech)]}
    end
  end

  factory :speech, class: Speech do
    name 'Speech 1'
    after_build { |speech| speech.user = speech.event.user }
  end
end

Et l'a utilisé comme,

FactoryGirl.create(:organizer)

Cela me donne un pointeur nul dans after_build du générateur de discours. discours.événement est nul. En fait mon scénario est plus complexe et j'en ai fait une simple abstraction. Existe-t-il une solution dans l'usine fille pour diriger les données existantes si déjà créées ?

@ashrafuzzaman Je pense que vous voulez en fait créer le discours dans published_event dans un rappel after_create et affecter l'événement au discours :

factory :published_event do
  published true

  after_create do |published_event|
    create(:speech, :event => published_event)
  end
end

Merci je vais essayer ça et je vous tiens au courant :)

@ashrafuzzaman de la chance ? Je vais fermer ceci pour le moment, mais n'hésitez pas à rouvrir ou à déposer un autre ticket si vous rencontrez toujours des problèmes. Merci!

Merci ça a marché :)

Cette page vous a été utile?
0 / 5 - 0 notes