Cómo puedo construir elegantemente un formulario para un modelo que tiene una asociación polimórfica?
Aquí están mis modelos:
class Lesson < ActiveRecord::Base
belongs_to :topic, :polymorphic => true
validates_presence_of :topic_type, :topic_id
end
class Subject < ActiveRecord::Base
has_many :lessons, :as => :topic
end
class Category < ActiveRecord::Base
has_many :lessons, :as => :topic
end
Ahora, lo que necesito es un formulario que permita al usuario crear o actualizar lecciones. La pregunta es, ¿cómo puedo proporcionar un menú selecto que ofrece una combinación de temas y categorías? (Para el usuario, en este formulario en particular, los Sujetos y las Categorías son intercambiables, pero ese no es el caso en otra parte).
Idealmente, esto se vería así:
views / lessons / _form.html.haml
= simple_form_for(@lesson) do |f|
= f.input :title
= f.association :topic, :collection => (@subjects + @categories)
Eso no funcionará porque solo estaríamos especificando el topic_id, y también necesitamos los topic_types. Pero, ¿cómo podemos especificar esos valores?
Supongo que el quid del problema es que realmente quiero un único menú de selección que especifique dos valores correspondientes a dos atributos diferentes (topic_id y topic_type). ¿Hay alguna manera elegante y railsy de hacer esto?
Algunas notas:
a) La herencia de una sola tabla haría que este problema desapareciera, pero me gustaría evitarlo, ya que las Categorías y los Temas tienen su propia relación ... Le ahorraré los detalles.
b) Podría extraer algunas travesuras de JavaScript, ¿sí? Pero eso suena desordenado, y si hay una forma más limpia de hacerlo, algún ayudante de forma mágica o algo así, entonces eso es preferibl
c) Aunque estoy usando simple_form, no estoy casado con él, en caso de que eso sea complicado.
Gracia