2015-02-04 2 views
0

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

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

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


Не уверены, если это DUP , Требуется предварительное решение ли Rails не позволяет пользователю сделать это t o начните с, или нет. (Если это так => конечно, некоторые NoSQL раствор)

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

Test.class_eval do; attr_accessor "new_attribute"; end

и

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

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

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

Спасибо!

+0

Возможный дубликат [Rails: динамические столбцы/атрибуты на моделях?] (Http://stackoverflow.com/questions/26029700/rails-dynamic-columns-attributes-on-models) –

+0

Меня это удивило бы, если бы это было необходимо передать схему базы данных вообще. Задача, которую я имею в виду, - это, например, дать пользователю системы магазинов возможность добавлять пользовательские категории товаров и по категориям, которые я не имею в виду «теги».Если купец хочет продать тип «Книги», его модели продукта потребуются другие поля, кроме типа «Велосипеды» или «Игры для ПК». Не говоря уже о подразделениях этих. Было бы смешно использовать «изящные генераторы» для этих задач, а также использовать их для работы со всеми возможными категориями. Это можно сделать с панели администратора. –

+0

Вы подумали о более общем способе проектирования схемы базы данных, чтобы вам не понадобилась новая таблица для каждой категории продуктов? Вы можете использовать http://api.rubyonrails.org/classes/ActiveRecord/Store.html или написать собственное хранилище ключей для любых атрибутов, которые нужны пользователю. –

ответ

0

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

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

class Artist < ActiveRecord::Base 
    has_many :attributes 
end 

class Attribute < ActiveRecord::Base 
    belongs_to :artist 
end 

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

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

+0

Hello Jeff Да Я знаю документацию об ассоциации. К сожалению, лучшие из этих методов могут возникнуть с вложенными/самореферентными (одноклассниками) двунаправленными (дружба не является предикацией только одного человека), упорядоченных (неравных) кортежей. Угадайте, есть ли обходное решение, если вместо столбцов таблицы в таблице –

Смежные вопросы