рельсы 3 динамически создают модель с атрибутами, которые хранятся в таблице базы данных - PullRequest
1 голос
/ 21 апреля 2011

Я создаю приложение ruby ​​on rails, которое хранит любимые публикации пользователей, натолкнулось на проблему и нуждается в некоторой помощи.

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

Мое приложение в настоящее время выглядит следующим образом: у меня есть ресурс публикаций , в котором хранятся типы публикаций. Существует ресурс под названием attribs , в котором хранятся все атрибуты для конкретной публикации. И, наконец, существует третий ресурс, который называется избранное .

class Publication < ActiveRecord::Base
 has_many :attribs

 # columns in this model => name, hidden

 # example ( :name => "movie", :hidden => false )
end

class Attrib < ActiveRecord::Base
 belongs_to :publication

 # columns in this model => publication_id, name, datatype

 # example (:publication_id => 1, :name => "Movie Title", :datatype => "string")
 # example (:publication_id => 1, :name => "Director", :datatype => "string")
end

class Favourite < ActiveRecord::Base

 # columns in this model => data, reason

 # example (:data => "[serialized form data]", :reason => "some reason why its a fav")

end

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

Есть ли способ, которым я могу динамически создать модель / форму с атрибутами, которые хранятся в таблице базы данных?

Поскольку Formtastic является генератором динамических форм, можно ли его использовать для создания формы?

Мне это кажется слишком сложным, но я не могу придумать другого способа сделать это, не имея в своем приложении ужасно большого количества таблиц.

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Для драгоценных камней Formtastic и Simple Form нужна модель, которая будет генерировать формы для вас.Проверьте этот пост здесь .Создать модель без таблиц.Затем создайте временную модель, используя модель без таблиц.Затем извлеките столбцы для временной модели из таблицы, содержащей значения столбцов для этой модели, как это делается для Foo в этой ссылке.Используя экземпляр временного класса, вы можете использовать Formtastic и сгенерировать для него форму.

0 голосов
/ 21 апреля 2011

Я думаю, что вы можете реализовать это самостоятельно.

@publication.attribs.each do |attrib|
  case attrib.datatype
  when "string"
    f.text_field attrib.name
  when "text"
    f.text_area attrib.name
  when "password"
    f.password_field attrib.name
  ...
end
...