Создание полей базы данных без рельсов "изящные генераторы"

Есть ли способ в Rails манипулировать полями базы данных и соответствующими методами доступа без "изящных генераторов"?

Я хочу, чтобы пользователи, поскольку они имеют привилегии, могли манипулировать структурой базы данных, то есть, по крайней мере, добавлять или удалять столбцы. Привилегированный пользователь должен иметь возможность добавлять новые столбцы.

Скажем, у меня есть объект / таблица artist и он должен "динамически" получать столбцы как "дата рождения", "играл с", "проданные копии"


Не уверен, что это дурак. Требуется предварительное решение, будет ли Rails препятствовать тому, чтобы пользователь делал это, сначала или нет. (если это так => конечно, какое-то решение noSQL)

В чистом рубине, по крайней мере, легко динамически добавить атрибут к существующей модели / классу, как это

Test.class_eval do; attr_accessor "new_attribute"; end

а также

Test.new.new_attribute = 2 вернется => 2 как и ожидалось

Для того, чтобы создать или манипулировать настроенной маской / моделью ввода: я не могу вручную пойти тем же путем, что и генераторы, и вручную вызвать ActiveRecord::Migration методы, такие как add_column а также создать методы получения / установки для ORM?

Если да или нет, в обоих случаях, с чего начать?

Спасибо!

1 ответ

Я не знаю ни одного элегантного способа позволить объекту динамически создавать новые столбцы. Это не будет хорошим дизайном приложения и приведет к большой неэффективности вашей базы данных.

Вы можете добиться того же типа функциональности, который ищете, используя ассоциации ActiveRecord в Rails. Вот простой пример для вашей модели Artist с использованием связанной таблицы атрибутов.

class Artist < ActiveRecord::Base
  has_many :attributes
end

class Attribute < ActiveRecord::Base
  belongs_to :artist
end

С помощью этой ассоциации вы можете разрешить вашему классу Artist создавать / редактировать / уничтожать атрибуты. ActiveRecord будет использовать внешние ключи в базе данных, чтобы отслеживать отношения между двумя моделями.

Если это не работает для вас, ваш следующий лучший вариант - изучить базы данных NoSQL, такие как MongoDB, которые обеспечивают гораздо большую гибкость в схеме. С NoSQL вы можете облегчить вставку данных без предопределенной схемы.

Другие вопросы по тегам