중첩 된 특성이 새 탭에서 생성 된 양식을 만들려고합니다. 중첩 된 특성을 받아 들일 수 있도록 내 모델을 설정했습니다. 그러나 양식을 제출할 때 텍스트 필드에 설정된 모든 값이 공백으로 전달되지만 컨트롤러는 중첩 된 필드를 모델에 전달합니다.중첩 필드 텍스트 필드 값이 컨트롤러에서 컨트롤러로 전달되지 않습니다. 3.2
Parameters: {"utf8"=>"✓", "authenticity_token"=>"x", "group"=>{"pilgrims_attributes"=>{"1399738268141"=>{"surname"=>"", "name"=>"", "middle"=>"", "aka"=>"", "prefix"=>"", "suffix"=>"", "nationality"=>"", "passport_number"=>"", "expiration(2i)"=>"5", "expiration(3i)"=>"10", "expiration(1i)"=>"2014", "date_of_birth(2i)"=>"5", "date_of_birth(3i)"=>"10", "date_of_birth(1i)"=>"2014", "accommodation"=>"", "roommate_id"=>"", "flight"=>"", "seat_id"=>"", "special_diet"=>"", "status"=>"Pilgrim"}}, "email"=>"", "telephone"=>"", "secondary_telephone"=>"", "address"=>"", "country_code"=>"", "state_code"=>"", "city"=>"", "zip"=>""}, "commit"=>"Create Group", "trip_id"=>"1"}
그래서 그것은 필드를 제출하는 데 필요한 따기 보인다, 그것은 제대로 date_selects에 기본값을 전달 있어요 그러나 나는 텍스트 필드에 입력 한 값은 단지 비어 있습니다.
그래서 현재 fields_for 블록을 사용하고 있지 않지만 컨트롤러에 전달되는 항목이 있기 때문에 필요하지 않은 것처럼 보입니다. fields_for
블록을 사용해야 할 경우 HTML 마크 업에 어디에 배치해야합니까?
강령 :
내 양식 :
<input id="group_pilgrims_attributes_1399739023635_surname" name="group[pilgrims_attributes][1399739023635][surname]" placeholder="Last Name" size="30" type="text">
LINK_TO :
<%= simple_form_for [@trip, @group] do |f| %>
<ul id="infoTabs" class="nav nav-tabs">
<li class="active"><a href="#pilgrim_info" data-toggle="tab">Pilgrims</a></li>
<li><a href="#contact" data-toggle="tab">Contact Info</a></li>
<li><a href="#payments" data-toggle="tab">Payments</a></li>
</ul>
<div class="tab-content">
<div id="pilgrim_info" class="tab-pane active">
<ul id="pilgrimTabs" class="nav nav-pills">
<li><%= link_to_add_pilgrim_fields('+ Add Pilgrim', f, :pilgrims, :data => {:toggle => 'pill'}, :class => 'add-pilgrim') %></li>
</ul>
<div class="tab-content">
</div>
</div>
</div>
<div class="row-fluid">
<div class="actions span12">
<%= f.submit :class => 'btn btn-primary' %>
<%= link_to 'Cancel', trip_groups_path(@trip), :class => "btn" %>
</div>
</div>
여기
내가 추가 순례자 버튼을 클릭 한 후 렌더링 년대 HTML의 조각이다 도우미
def link_to_add_pilgrim_fields(name, f, association, options = {})
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render(association.to_s , :f => builder)
end
link_to_function(name, "add_pilgrims_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")", options)
end
그리고 필드를 추가하는 자바 스크립트 함수 :
이function add_pilgrims_fields(link, association, content) {
var new_id = new Date().getTime();
var regex = new RegExp("new_" + association, "g");
var display_id = $(".nav-pills").children().length;
$('.add-pilgrim').closest('li').after('<li><a href="#pilgrim'+ new_id +'" data-toggle="pill">New Pilgrim ' + display_id + '</a><span>x</span></li>');
$('.tab-content').append('<div class="tab-pane" id="pilgrim'+new_id+'">' + content.replace(regex, new_id) + '</div>');
}