Как представить / сохранить информацию для таблицы, которая будет содержать динамический набор конфигураций - PullRequest
0 голосов
/ 05 ноября 2011
create table app (id, name, desc)
create table app_config (id, app_id, key, value)

Для каждой строки в приложении может быть много строк в app_config (например, может быть 3 или 5 строк, и значение может быть разных типов - строка, текст, дата ..)

Чтобудет лучшей стратегией для рендеринга этого динамического представления или сохранения этой информации через Rails.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2011

Существуют различные возможности в зависимости от вашего использования. Вот некоторые из них:

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

    ==> Вы можете использовать хэш Ruby и сохранить его как один объект в виде двоичного файла (см. "Двоичный файл Rails" ) или в виде текста (YAML).

    Ваша миграция базы данных для AppConfig может быть:

    def change
      create_table :app_configs do |t|
        t.text :config
        t.integer :app_id
        t.timestamps
      end
    end
    

    Это решение для сохранения его в виде текста YAML.

  2. Вы можете хранить каждую запись в вашем app_config как отдельный объект. Тогда у вас есть отношение 1: много между App и AppConfigs. Вы должны заботиться о том, что для каждого ключа может быть сохранено только одно значение. Возможно, вы должны убедиться, что для каждого App создано не менее 3 AppConfig объектов, а некоторые могут быть добавлены по желанию.

    Ваша модель должна быть:

    class App < ActiveRecord::Base
      has_many :app_configs
      ...
    end
    class AppConfig < ActiveRecord::Base
      belongs_to :app
      ...
    end
    

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

0 голосов
/ 06 ноября 2011

откройте консоль и создайте тестовый проект:

$ rails new testproject
$ rails generate scaffold App name:string description:string
$ rails generate scaffold AppConfig key:string value:string app:references
$ rake db:migrate

Просмотрите сгенерированные файлы и изучите их код.

Откройте файлы модели и добавьте правила проверки.

Одной из стратегий для вашей проблемы может быть перечисление всех приложений и добавление в каждую строку ссылки на список app_config. Вы можете использовать вложенные маршруты, и у вас будут ссылки, такие как: / app / 12 / app_configs

Итак, откройте ваш route.rb, удалите маршруты, добавленные с помощью скаффолдинга, и введите:

resources :apps do
  resources :app_configs
end

После сохранения файла введите в консоли:

$ рейк-маршруты

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

В app_conf вы должны установить и получить AppConf с app_id = request [: app_id] в контроллере AppConfs.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...