ben

OMÜ , Bilgisayar Mühendisliği, 13'

1 Aralık 2015 Salı

nested_form dynamic


    Bir önceki çalişmada soruları ve cevapları tek bir ekrandan oluşturup düzenleyebildik, ama farkettinizmi bilmiyorum soru sayısı ve şık sayısı yazılımcıya bağımlı, bu sayıya kullanıcının karar vermesini isteyelim,  Önceki çalışmanın üzerine devam edelim

öncelikle cevapları sil işaretlendiği anda sillinmesi işlemini yapalım:

layouts/application.html.erb

 <%= javascript_include_tag :defaulte, :chache => true %>


<script type="text/javascript">
    var resultsList = $('form');
   
    resultsList.on('click', '.remove_fields', function (event) {
        $(this).prev('input[type=hidden]').val('1');
        $(this).closest('fieldset').hide();
        event.preventDefault();
    });

</script>


_choice_fields.html.erb

<div>
          <%= f.label :content, "Cevap:"%>
          <%= f.text_field :content %>
          <%= f.hidden_field :_destroy%>
          <%= link_to "remove", "#" ,class: "remove_fields"%>
<div>




Soruları kaldırmak içinde;

_question_fields.html.erb
       
          <%= f.check_box :_destroy%>
          <%= f.label :_destroy, "Soruyu Sil"%>
bu satırları silip , yerine;

           <%= f.hidden_field :_destroy%>
          <%= link_to "remove", "#" ,class: "remove_fields"%>
yazalım


Yeni cevap ekleme linki  verelim kullanıcı istediği kadar cevap ekleyebilsin:

_question_fields.html.erb

         <%= link_to_add_fields "Cevap Ekle ", f, :choices%>

application_helper.rb

def link_to_add_fields(name, f, association)
    new_object = f.object.send(association).klass.new
    id=new_object.object_id
    fields = f.fields_for(association, new_object, child_index: id) do |builder|
      render(association.to_s.singularize + "_fields", f: builder)
    end
    link_to(name, '#' ,class: "add_fields" , data:{id:id, fields: fields.gsub("\n","")})
 end

application.html.erb

<script>
    var resultsList = $('form');

    resultsList.on('click', '.remove_fields', function (event) {
       .
       .
       .
       .
     resultsList.on('click', '.add_fields', function (event) {
        time=new Date().getTime
        regexp=new RegExp($(this).data('id'),'g')
        $(this).before($(this).data(fields).replace(regexp,time))
        event.preventDefault();
    });
</script>