2011-02-09 5 views
10

J'essaie de comprendre comment permettre à un utilisateur de créer des formulaires personnalisés avec tous les types de champs. S'il y a une pierre précieuse, ce serait génial, mais je n'arrive pas à en trouver un où que ce soit.Rails 3: Utilisateur Formulaires personnalisés créés?

J'ai une configuration DB comme celui-ci qui:

t.integer :form_id 
    t.string :name 
    t.string :hint 
    t.integer :position 
    t.string :field_type 
    t.boolean :required 
    t.integer :size 
    t.boolean :multiple 
    t.text :values 
    t.timestamps 

Et cela est à peu près là où je suis. Je ne peux pas penser à comment parcourir le field_type et renvoyer les valeurs, ainsi que les associer à des formulaires en cours de remplissage.

Merci

+0

Avez-vous déjà trouvé une bonne solution? essayer de faire la même chose. –

+0

@noel_g Voir la réponse ci-dessous – kkampen

Répondre

12

Je suppose que vous avez une sorte de modèle Form, puis une sorte de modèle Field, et un Form has_many :fields. Correct?

La création du formulaire est plus simple: récupérez le formulaire, parcourez tous les champs et, selon le type, affichez le code correct. Si vous utilisez quelque chose comme formtastic ou simple_form le code est assez simple. Mais pour le faire fonctionner, à l'intérieur de votre contrôleur, vous devrez créer un objet factice, qui a un getter et un setter pour tous les champs. Vous pouvez utiliser un hachage simple pour cela, ou OpenStruct (mieux). Pendant l'itération sur les champs, définissez le hachage avec des valeurs vides ou par défaut.

Je pense que vous voulez également enregistrer les résultats d'un formulaire? Je pense que la façon la plus simple est d'utiliser un modèle comme celui-ci

t.form_id :integer 
t.fields_data :text 

et stocker les données saisies dans le champ de texte en exemple Json ou quelque chose. Vous pouvez aussi faire quelque chose comme

class FormData 
    belongs_to :form 
end 

class FormDataField 
    belongs_to :form_data 
    belongs_to :form_field 
end 

alors que c'est la plus propre (vous pouvez interroger sur les valeurs de remplir les champs pour une certaine forme), il est peut-être trop d'une surcharge.

+0

Je comprends ce que vous dites, et il devient plus clair. Auriez-vous un échantillon MVC ou cela? Dans le formulaire_data, comment l'associer à chaque champ de formulaire? Si vous connaissez des gemmes ou des tutoriels, je serais très reconnaissant. Merci. – kkampen

+0

kkampen, on dirait qu'il n'y a rien là-bas. 20 minutes de googling et c'est la meilleure ressource sur la création de formulaires personnalisés. Je voulais trouver une solution open source mais ne semble pas en avoir une. –

Questions connexes