Estoy trabajando en mi primera aplicación Rails (3) y estoy buscando sembrar una gran cantidad de datos.¿Cómo sembrar modelos con relaciones HABTM con otros modelos sin semilla?
El problema que estoy teniendo es que quiero sembrar algunos modelos que tienen una relación has_and_belongs_to_many con otros modelos que acabo de sembrar. Estoy haciendo lo que parece correcto, pero no estoy obteniendo los resultados que esperaba.
que tienen un modelo de Asana (simplificado):
class Asana < ActiveRecord::Base
has_and_belongs_to_many :therapeutic_foci
end
y el modelo TherapeuticFocus:
class TherapeuticFocus < ActiveRecord::Base
has_and_belongs_to_many :asanas
end
En mi db/seeds.rb, que crear algún TherapeuticFoci:
tf = TherapeuticFocus.create([
{:name => 'Anxiety'},
{:name => 'Asthma'},
{:name => 'Fatigue'},
{:name => 'Flat Feet'},
{:name => 'Headache'},
{:name => 'High Blood Pressure'},
{:name => 'Stress'} ])
A continuación, cree una Asana:
asanaCreate = Asana.create!([
{ :english_name => 'Mountain Pose',
:traditional_name => 'Tadasana',
:pronunciation => 'TadaSANA',
:deck_set => 'Basic',
:type => 'Standing',
:therapeutic_foci => TherapeuticFocus.where("name in ('Stress','Flat Feet')")}
])
El resultado es que se crean los modelos TherapeuticFocus, se crea el Asana, pero no crea las relaciones con los modelos TherapeuticFocus. La matriz resultante está vacía.
Si me quedo
TherapeuticFocus.where("name in ('Stress','Flat Feet')")
en la consola de rieles, consigo los esperados dos registros:
irb(main):010:0> TherapeuticFocus.where("name in ('Stress','Flat Feet')")
=> [#<TherapeuticFocus id: 6, name: "Flat Feet", description: nil, created_at: "2010-10-11 01:48:02", updated_at: "2010-10-11 01:48:02">,
#<TherapeuticFocus id: 19, name: "Stress", description: nil, created_at: "2010-10-11 01:48:02", updated_at: "2010-10-11 01:48:02">]
Así que, ¿cómo se hace esto?
¿O existe una forma mejor de hacerlo?
Gracias!
RESPUESTA POST:
que ya había añadido la inflexión:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'focus', 'foci'
end
Mi migración de las tablas de combinación que parece:
create_table :asanas_therapeutic_foci, :id => false do |t|
t.references :asana, :therapeutic_focus
end
Voy a tratar de cambiar esto a t. belongs_to en lugar de t.references y ver si eso funciona.
Aha, lo descubrí, me di cuenta de que puedo ver el desarrollo.log durante un rake db: setup, y vi que mi problema se derivaba del atributo ": therapeutic_foci" que no podía asignarse en masa. Arreglando eso, todo funciona. ¡Gracias! –