Parece que debería haber sido capaz de encontrar una respuesta obvia a este problema después de unas horas de búsqueda en Google y pruebas.Atributos dependientes en Factory Girl
Quiero ser capaz de establecer caredate.user_id => provider.user_id dentro de la fábrica de fecha de envío.
prueba de error:
ActiveRecord::RecordInvalid: Validation failed: User must be same as provider user
tengo una validación ActiveRecord que funciona cuando se prueba a través del navegador:
class Caredate < ActiveRecord::Base //works fine when testing via browser
belongs_to :user
belongs_to :provider
validates_presence_of :user_id
validates_presence_of :provider_id
validate :user_must_be_same_as_provider_user
def user_must_be_same_as_provider_user
errors.add(:user_id, "must be same as provider user") unless self.user_id == self.provider.user_id
end
end
//factories.rb
Factory.define :user do |f|
f.password "test1234"
f.sequence(:email) { |n| "foo#{n}@example.com" }
end
Factory.define :caredate do |f|
f.association :provider
**f.user_id { Provider.find_by_id(provider_id).user_id } //FAILS HERE**
end
Factory.define :provider do |f|
f.association :user
end
Mis disculpas si esto ha sido contestada con anterioridad; Intenté varias opciones diferentes y no pude hacer que funcionara.
Actualización: Esto pasa la validación, por lo que me estoy acercando. Podría hackear con un número al azar.
Factory.define :caredate do |f|
f.association :user, :id => 779
f.association :provider, :user_id => 779
end
Funciona si la fábrica del proveedor se definió en factories.rb antes de la fábrica de CareDate. ¡Gracias! –
La dependencia de la orden es un buen punto, y es aún peor si las dos fábricas se definen en archivos separados. En algún momento te preguntas si tiene más sentido usar accesorios en casos como este. – zetetic
Esto funcionó hasta que intenté reconstruir db y cargar el esquema. Parece que FactoryGirl está buscando una mesa. 'rake db: schema: load --trace ... ¡rake abortado! La tabla 'claimaway_development.providers' no existe' [Aquí] (http://groups.google.com/group/factory_girl/browse_thread/thread/4852f1a129d72839) es un debate, pero no pude conseguir que esta solución funcionara. –