2011-02-04 1 views
0

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

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

    serialize :additional_fields, Hash 

    accepts_nested_attributes_for :applicant, :additional_fields 

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

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

Спасибо! Ryan

ответ

1

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

Вам не нужно: 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" /> 

это позволит сэкономить Hash с ключами: first и second

Вы можете положить в свой модель массива полей, например, в вашей модели пользователя:

FIELDS= ["item1", "item2"] 

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

<% User::FIELDS.each do |field|%> 
    <input name="my_application[additional_fields][<%= field %>]" type="text" /> 
<% end %> 
+0

Есть ли способ превратить эти хэш-ключи в методы? Например, используйте my_application.additional_fields.first – lundie

+0

это должно ответить: http://stackoverflow.com/questions/4910326/rails-editing-serialized-data-in-form – apneadiving

+0

Это работает, если вы знаете, что поля будут. В моем случае форма динамически генерируется, и каждое приложение может иметь разные поля. Есть ли способ справиться с этим, используя что-то вроде мета-программирования для генерации необходимых методов из того, что содержится в Serialized Hash? – lundie

1

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

Благодарим за помощь!

+0

Это действительно хорошая статья. По причинам, которые я еще не понял после нескольких дней программирования Ruby/Rails, мне пришлось охватить сериализованную переменную «options» с помощью «self» в двух методах атрибутов metaprogrammed. В противном случае параметры отображаются локально для этих методов. Я на Rails 3 и Ruby 1.8.7. – sowbug

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