실제로 이것은 매우 간단하게 만들 수 있습니다. This question 및 this one을 사용하면 AJAX 및 jquery를 더 잘 이해할 수있었습니다.
나는 new
조치를 내 컨트롤러에 format.js
을 넣어 :
예로 들어 부모를 사용할 수 있습니다
ParentsController
def new
@parent = Parent.new
respond_to do |format|
format.js
end
end
내 parents/new.html.erb
과 같은 개인의 선택을 삭제하고 new.js.erb
로 교체하는 것 내 "Parent" link_to
에 의해 호출됩니다.
# parents/new.js.erb
$("#generate-form").html("<%= escape_javascript(render(:partial => 'parents/form', locals: { parent: @parent })) %>");
그러면 AJAX 용 remote => true
하다는 부분에 부모 형태를 만든다.
# parents/_form.html.erb
<%= form_for(@parent, :remote => true) do |f| %>
<%= f.input :full_name %>
<%= f.button :submit, 'Done' %>
<% end %>
그런 다음 두 양식을 모두 보유하는 하나의 페이지가 있습니다.
PagesController
def index
respond_to do |format|
format.html
end
end
그런 다음 해당 페이지에서 부모와 자식 모두에 대한 링크.
#pages/index.html.erb
<li><%= link_to "Parent", new_parent_path, :remote => true %></li>
<li><%= link_to "Child", new_child_path, :remote => true %></li>
<div id="generate-form">
</div>
내 링크와 형태, 내 new
행동과 보스로 내 div id="generate-form"
행위의 js
형식으로 응답 배치하거나 그것의 부분적인 내부를 형성 할의 remote => true
. 이렇게하면 클릭 한 링크에 따라 자동으로 하나를 다른 것으로 대체하므로 양식이 동적으로 변경됩니다.
참고 : 하위 모델의 코드는 양식 필드를 제외하고 동일합니다. 모델 이름 (Parent to Child)을 바꿉니다.
하지만 '자동차', '개'등과 같은 모델이 더 있으면 어떻게 될까요? 페이지를로드하는 데 시간이 오래 걸리지 않을까요? – LearningRoR
새 항목을 만드는 양식의 경우 데이터베이스에 도달하지 않으며 페이지로드 시간이 크게 증가하지 않습니다.기존 양식을 편집하기 위해 양식이 필요한 경우 CSS에서이 작업을 수행하고 JSON을 사용하여 양식을 채워야합니다. – bhuga