Создание формы с неизвестными полями и сохранение этих полей в сериализованном поле в моей модели - PullRequest
0 голосов
/ 04 февраля 2011

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

class MyApplication < ActiveRecord::Base
    has_one :applicant
    belongs_to :member

    serialize :additional_fields, Hash

    accepts_nested_attributes_for :applicant, :additional_fields

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

У кого-нибудь есть мысли?

Спасибо! Райан

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

В итоге я воспользовался этим уроком http://www.kalzumeus.com/2009/11/17/practical-metaprogramming-with-ruby-storing-preferences/, который работал очень хорошо.

Спасибо за вашу помощь!

1 голос
/ 05 февраля 2011

Я только что проверил, что вы предлагаете.

Вам не нужно: accepts_nested_attributes_for :additional_fields

Просто добавьте в форму HTML вроде:

<input name="my_application[additional_fields][first]" type="text" /> 
<input name="my_application[additional_fields][second]" type="text" /> 

сохранит хеш с ключами: first и second

Вы можете добавить в вашу модель массив полей, скажем, в вашей пользовательской модели:

FIELDS= ["item1", "item2"]

На ваш взгляд:

<% User::FIELDS.each do |field|%>
     <input name="my_application[additional_fields][<%= field %>]" type="text" /> 
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...