Generar un modelo de Rails desde dentro del código (invocar generador desde un controlador)

Tengo una necesidad particular de poder invocar un comando de Rails desde dentro del código (es decir, cuando ocurre alguna acción). Necesito que se cree un modelo con campos específicos (que estarán determinados por un formulario) y ejecutar la migración creada al final.

Así que este formulario tendría que crear todos los campos, lo que luego resultaría con la creación de un modelo con sus campos determinados (tabla y columnas)

Entonces, ¿hay una manera de invocar rails generate model NAME [field[:type][:index] field[:type] y bundle exec rake db:migrate desde dentro de un controlador / código ruby?

En lugar de tener una tabla por categoría, aquí hay un enfoque más relacional-base de datos-y:

 create table category ( id serial primary key, name text not null ); create table attribute ( id serial primary key, name text not null ); create table item ( id serial primary key, category_id integer not null references category (id), description text ); create table category_attribute ( attribute_id integer not null references attribute (id), category_id integer not null references category (id) ); create table item_attribute ( attribute_id integer not null references (attribute.id), item_id integer not null references item (id), value text ); 

Cuando crea una categoría, almacena su nombre (y cualquier otro atributo de uno a uno) en la tabla de category . Asegúrese de que la tabla de attribute tenga una entrada para cada atributo que tenga la categoría y luego use la tabla category_attribute para vincular esos atributos a esa categoría.

Cuando agrega un nuevo miembro de una categoría, utiliza la tabla de item para almacenar las cosas principales sobre el elemento y la tabla item_attribute para almacenar los valores de cada uno de sus atributos. Así que con el enfoque de autos y mascotas que mencionaste, tu base de datos podría verse como

 category id | name ----+------ 1 | car 2 | pet attribute id | name ----+------------ 1 | make 2 | breed 3 | model_year 4 | name category_attribute attribute_id | category_id --------------+------------- 1 | 1 2 | 2 3 | 1 4 | 2 item id | category_id | description ----+-------------+---------------- 1 | 1 | Hyundai Accent 2 | 2 | Fuzzy kitty item_attribute attribute_id | item_id | value --------------+---------+--------- 1 | 1 | Hyundai 3 | 1 | 2007 2 | 2 | DSH 4 | 2 | Sam 

Este enfoque puede parecer bastante poco obvio, ya que no coincide con el estilo de “un objeto con muchos atributos” que se usa con los modelos de Rails. Sin embargo, así es como funcionan las bases de datos relacionales. Creo que hay algo de magia ActiveRecord que puedes hacer para que la traducción de objeto / relacional sea un poco más automática, pero no recuerdo cómo se llama en este momento.