2017-10-12 12 views
3

J'ai un formulaire avec de nombreux champs avec cases à cocher et boutons radio. Je souhaite ajouter une option "Autre" dans chacun d'entre eux. Maintenant, si l'utilisateur clique sur l'autre option, il devrait être autorisé à ajouter une nouvelle option qui devrait être sauvegardée dans la base de données pour une utilisation future.Ajouter de nouvelles options aux rails sélectionner/boutons radio/cases à cocher

Voici mon code actuel:

<label> Goals: </label><br> 
<%= f.collection_check_boxes :goal_id, Admin::Goal.all, :id, :title, checked: @assessment.goal_id, :include_hidden => false do |b| %> 
    <%= b.label class:"label-checkbox" do %> 
    <%= b.check_box + b.text%> 
    <% end %> 
<% end %> 

J'espère que cette question pourrait être une aide à d'autres aussi et merci pour votre aide à l'avance. :)

+0

vérifier ma solution – krishnar

Répondre

2

U besoin de personnaliser collection_check_box comme celui-ci

<% other_options = [{id: "other",title: "other"}] %> 

<label> Goals: </label><br> 
<%= f.collection_check_boxes :goal_id, Admin::Goal.all + other_options, lambda{|a|a["id"]}, lambda{|a|a["title"], checked: @assessment.goal_id, :include_hidden => false do |b| %> 
    <%= b.label class:"label-checkbox" do %> 
    <%= b.check_box + b.object[:title]%> 
    <% end %> 
<% end %> 

Ce que je fais ici

  • Fusion et votre tableau other_option tableau de collection de but.
  • autre tableau n'est pas Relation donc vous avez besoin de modifier comment id, titre sont récupérées. Donc j'utilise lambda pour accéder à la même chose. B.text fonctionnera si vous utilisez uniquement Goal. Puisque nous utilisons notre hash personnalisé dans le tableau other_option, nous devons accéder à la valeur b.object, puis accéder au titre. Cela fonctionnera pour les deux.
+0

Merci qui a travaillé exactement je voulais. :) – Vishal