如何为教育对象添加一组相同的输入,因此提交后我将有2个新的教育对象?需要通过单击现有输入集之后的图标来显示优选的新集。
这是我的new
方法:
def new
@user = User.new
@user.educations.build
@user.works.build
end
我对它的看法:
<%= simple_form_for [:admin, @user] do |u| %>
<%= u.error_notification %>
<%= u.input :name, label: "Name" %>
<p><b>Photo</b></p>
<%= image_tag(@user.photo_url, size: "80x90",
class:"img-rounded") if @user.photo? %>
<%= u.input :photo, label: false %>
<%= u.input :tel, label: "Tel.:" %>
<h3>Education</h3>
<hr>
<%= u.simple_fields_for :educations do |e| %>
<%= e.input :name, label: "University" %>
<%= e.input :year_started, label: "Started" %>
<%= e.input :year_finished, label: "Ended" %>
<% end %>
# icon `+`
<i class="fa fa-plus fa-2x"></i>
<h3>Work</h3>
<hr>
<%= u.simple_fields_for :works do |w| %>
<%= w.input :name, label: "Name" %>
<%= w.input :year_started, label: "Started" %>
<%= w.input :year_finished, label: "Ended" %>
<% end %>
<%= u.button :submit, "Надіслати" %>
<% end %>
答案 0 :(得分:2)
如果要在调用new
方法时添加额外的对象,则只需要“构建”更多关联对象:
def new
@user = User.new
2.times do
@user.educations.build
end
@user.works.build
end
这将为您提供两组education
字段(不再需要更改代码)。
如果您想在之后调用额外的对象/字段,那么您已经呈现了new
方法,那么您必须动态地执行它,因为{{1}建议使用类似Cocoon的内容。
有一个过时的,但good tutorial here。
-
动态添加字段依赖于一个简单的模式:
- 按钮/图标按
- Ajax调用控制器
- Controller使用
构建表单@Tom Walpole
- Ajax响应将新的
醇>fields_for
放入DOM
这个(ajax)和类似“Railscast”(静态)方法之间的主要区别是它在rails中正确构建fields_for
。没有黑客工作......
fields_for
如果您使用的是#app/views/admin/users/new.html.erb
<%= link_to fa-icon("plus 2x"), admin_new_user_path, remote: true %>
,那么获得font-awesome-rails
帮助后,您最好使用fa-icon
gem。
font-awesome
这个问题的关键是#app/controllers/users_controller.rb
class UsersController < ApplicationController
respond_to :js, :html
def new
@user = User.new
@user.educations.build
@user.works.build unless request.xhr?
end
end
#app/views/users/new.js.erb
var form = $("<%=j render 'users/new' ");
$("form#new_admin_user [[fields_for_identifier]]").html($(form).html());
方法。 “静态”方法的一个大问题是每个新字段的child_index: Time.now.to_i
将与上一个字段完全相同,搞乱了你的参数:
id
上述应该有效,但可能需要调整。
答案 1 :(得分:1)
最简单的解决方案可能是茧宝石 - https://github.com/nathanvda/cocoon