2016-02-26 4 views
0

Je construis une page qui contient une table html, où l'utilisateur peut choisir le nom dans l'en-tête du tableau et le contenu de la ligne du tableau.Rails - Comment avoir un formulaire enregistrer les données de plusieurs entrées comme un hachage

L'utilisateur va entrer les informations dans un formulaire, qui sera analysé dans un hachage et enregistré dans le DB.

Voici un exemple où :key sera une clé du hachage (texte d'en-tête de table) et :value sera une valeur dans le hachage (contenu de colonne de table).

<%= form_for([@page]) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 

    <%= f.text_field :key1 %>  
    <%= f.text_field :value1 %> 

    <%= f.text_field :key2 %>  
    <%= f.text_field :value2 %> 

    <%= f.text_field :key3 %>  
    <%= f.text_field :value3 %> 

    <%= f.text_field :key4 %>  
    <%= f.text_field :value4 %> 

    <%= f.submit "Save" %> 

<% end %> 

je pouvais faire une nouvelle table de DB avec une association has_many au page DB et ont les informations stockées dans ce tableau. Ensuite, ces données peuvent être reconstruites en hachage lorsque j'ai besoin de rendre la vue. Mais si je pouvais enregistrer l'ensemble du hachage dans une colonne de la BD page, cela m'empêcherait de reconstruire le hachage à chaque fois que quelqu'un visiterait la page. J'ai du mal à trouver comment faire cela en form_for. Le premier problème est qu'il nécessite les colonnes key et value du tableau page. Une solution simple serait de changer toutes les entrées en <%= f.text_field :html_table %> (colonne html_table dans le tableau page). Mais alors il ne sera pas capable de distinguer entre une clé et une valeur dans le hachage. Et je n'ai aucun moyen de lui dire de mettre les informations dans un hachage qui est ensuite stocké dans la colonne html_table de la table page.

Je ne sais pas si c'est même une chose possible, mais il ne me fait pas de mal de demander avant d'aller de l'avant avec la construction de la table d'association has_many et la mise en place de cette façon.

Répondre

0

Je suis plutôt confus au sujet de votre question. Vous ne pouvez pas construire un hachage comme celui-ci dans votre action de contrôleur?

html_table = { 
    params[:key1] => params[:value1], 
    params[:key2] => params[:value2], 
    params[:key3] => params[:value3], 
    params[:key4] => params[:value4] 
} 

Ensuite, enregistrez-le dans l'attribut @page.html_table.

EDIT:

Dans ce cas, la forme est pas attirbutes d'un objet particulier. Ainsi, au lieu d'utiliser form_for (Link), vous devez utiliser form_tag (Link).

Exemple:

<%= form_tag "/pages_controller/build_html_table" do %> 
    <%= text_field_tag "key1" %> 
    <%= text_field_tag "value1" %> 
    <%= submit_tag "Save" %> 
<% end %> 
+0

Il est possible, mais ce serait la forme ressembler? 'text_field: key1' sans le' f.'? – Rob

+0

@ user3234020 Oui, vous devriez utiliser une aide différente. Vérifiez le edit – Harfangk

+0

Ok je vais essayer demain. – Rob