У меня есть приложение для рельсов!рельсы разные атрибуты формы по категории
Я хотел бы создать форму для модели product
, где пользователи могут сначала выбрать категорию продукта, а затем заполнить форму.
Это было бы легко, но я хотел бы показать им разные атрибуты, основанные на выбранной категории. Что-то вроде, если они выбирают категорию книг, тогда у них будут поля, такие как title
, author
, published_at
, но если они выбирают категорию обуви, то они могут заполнить поля size
, color
и type
.
Я видел несколько вопросов о динамических формах, но, насколько я понимаю, мне это не нужно, поскольку поля формы будут предопределены, и пользователи не смогут добавлять дополнительные поля.
Каков хороший подход в этом случае? Должен ли я создавать более разные модели, такие как (shoes
, books
и т. Д.) Или что-то еще?
Ричард, спасибо за быстрый ответ. Не могли бы вы подробнее рассказать о том, как я писал (обувь, книги)? Я не вижу некоторых вещей: как можно определить категорию? (Должен ли я делать как 'category_id: 1' и' category_type: "book"??) Как именно я могу добавить атрибуты к различным категориям (как сохранить в db -> простые атрибуты или сериализованный хеш)? Не могли бы вы обновить свой ответ с помощью 'schema.rb'? –
Ну ... как вы управляете категориями? Вы задали вопрос об изменении формы, а не о том, как вы должны структурировать свой сервер. Я могу обновить ответ, но мне нужно знать, как вы хотите, чтобы он работал - у вас есть отдельная модель «Категория» и т. Д.? –
Sry, мой вопрос непонятен. Он еще не создан. Будет 3-4 категории. Если вы попытаетесь создать «продукт», вы выбираете «категорию» с помощью select_helper, и после его выбора остальная часть формы становится видимой в зависимости от того, что вы выбрали. До сих пор это легко. Меня путают, когда дело касается разных атрибутов, основанных на разных «категориях». Таким образом, категория книг будет иметь титул, а автор attr и обувь будут иметь размер и цвет. Я не знаю, каким оптимальным способом является структура моделей/attr в этом случае. Я думаю, что могу заставить его работать, но будет очень плохой код. –