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>