На самом деле это было очень просто создать. This question и this one помогли мне лучше понять AJAX и jquery.
Позволяет использовать родитель в качестве примера:
Я поставил format.js
в моем контроллере для new
действий:
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 })) %>");
Затем создайте форму Родитель в частичное что remote => true
для AJAX.
# 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>
remote => true
моих ссылок и форм будут реагировать на формат моих new
действий и мои div id="generate-form"
действуют как босс js
, размещение либо образуют частичные внутри него. Это автоматически заменяет одно на другое в зависимости от выбранной вами ссылки, что приводит к динамическому изменению форм.
Примечание: код для детской модели одинаков (кроме полей формы). Просто замените имя модели (от родителя к ребенку).
Но что произойдет, если у меня будет больше моделей, таких как «Автомобиль», «Собака» и т. Д.? Разве это не заставит страницу загружать больше времени? – LearningRoR
Для форм для создания новых элементов вы не попадете в базу данных, и время загрузки страницы не будет заметно увеличиваться.Если вам нужны формы для редактирования существующих вещей, тогда вы все равно должны это сделать в CSS и использовать JSON для их заполнения. – bhuga