Tengo tareas y usuarios. Cuando un usuario completa una tarea, creo una finalización que tiene un campo para que el usuario indique cuánto tiempo pasó. Necesito un formulario que muestre todas las tareas con su estado de finalización y el atributo time_spent. En el envío, las terminaciones que existen deben actualizarse y deben crearse nuevas. Me gustaría hacer esto en Formtastic si es posible, pero estaré contento con una solución básica de Rails 3.¿Cómo mostrar un formulario para un subconjunto de registros asociados, algunos de los cuales aún no existen?
class Completion < ActiveRecord::Base
belongs_to :task
belongs_to :user
# attribute time_spent
end
class User < ActiveRecord::Base
has_many :completions
has_many :tasks, :through => :completions
end
class Task < ActiveRecord::Base
belongs_to :milestone
has_many :completions
has_many :users, :through => :completions
end
Un aspecto adicional es que quiero mostrar solo un cierto conjunto de tareas, como las pertenecientes a un Milestone. ¿Debo tener un formulario en el controlador Milestone que se publique en el controlador de finalizaciones?
class Milestone < ActiveRecord::Base
has_many :tasks
has_many :completions, :through => :tasks
end
ACTUALIZACIÓN he buscado desde hace días y he encontrado manydeadends. Este Multiple objects in a Rails form está cerca, pero requiere que todos los objetos de enlace ya existan.
Lo que diferencia esta pregunta es que algunos de los enlaces aún no existen y no hay un solo modelo para anidar los enlaces. P. ej. Con Ryan Daigle's Nested Object Forms post) he hecho que esto funcione para editar todas las terminaciones posibles para un usuario, pero necesito editar un subconjunto de posibles terminaciones en un formulario. ¿Necesito hacer un objeto redundante MilestoneCompletions que has_many
Completions y belongs_to
Usuario? ¿Puede un ActiveModel has_many
?
acaba de eliminar mi respuesta para que su pregunta sea más visible, edite su pregunta con los detalles que me dio :) – apneadiving
¡Eso es muy considerado! Tuve que superar este problema, así que finalmente me di por vencido y trabajé en torno a eso. Voy a publicar mi respuesta para cualquier persona interesada. – Turadg