2011-06-09 25 views
5

Acabo de empezar a usar Ancestry en lugar de awesome_nested_set y me gustaría crear un formulario anidado para que pueda crear una cuenta principal y muchas cuentas secundarias en un solo formulario. El problema parece ser que Ancestry no te permite crear un hijo para un nuevo padre.Ancestry Rails anidados forma

En awesome_nested_set que podía hacer esto en la consola de rieles

a = Account.new 
a.children.build 

Cuando escribo a.children puedo ver que el nuevo niño en allí, aunque mi padre cuenta no se ha creado todavía. Esto me permitió mostrar un formulario con la cuenta principal y algunos niños en blanco, y luego al enviar, simplemente ignoraría cualquier niño en blanco y crearía el lote completo.

Si yo trato de hacer lo mismo con ascendencia me sale el siguiente error:

a=Account.new 
a.children 
Ancestry::AncestryException: No child ancestry for new record. Save record before performing tree operations. 
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/ancestry-1.2.4/lib/ancestry/instance_methods.rb:62:in `child_ancestry' 
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/ancestry-1.2.4/lib/ancestry/instance_methods.rb:132:in `child_conditions' 
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/ancestry-1.2.4/lib/ancestry/instance_methods.rb:136:in `children' 
    from (irb):8 
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands/console.rb:44:in `start' 
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in `start' 
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands.rb:23:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

Es esto una limitación de ascendencia? ¿Hay alguna manera diferente en la que podría crear una forma anidada usando ancestros?

Respuesta

5

Hoy me he encontrado con el mismo problema: creo que es un limitation of ancestry, mirando el código (se produce este error if new_record?).

Si bien no es ideal, en este momento estoy usando children.create en lugar de children.build.

+0

Sí, no es ideal. Debido a este problema y también al hecho de que no funciona bien con el pensamiento, la esfinge y la paginación sobre un hash multidimensional parece imposible, estoy volviendo a un conjunto anidado impresionante. Me gusta la limpieza de los ancestros y sería bueno para cosas simples, pero no es para mi proyecto actual. – map7

+0

Me he encontrado con el mismo problema al tratar de escribir pruebas con FactoryGirl. Perdón por zombie esta pregunta, pero pensé que esto podría ser interesante para algunos. – IAmNaN

Cuestiones relacionadas