我有一个包含3种形式的视图,时间表,锻炼和练习,每种形式都像编辑形式一样。并在所有视图中提交一个(保存)按钮。
当我点击保存按钮时。单击后,应更新这些表单上更改的每个数据。
最佳解决方案是什么? Javascript更新每个数据分开?怎么做 ?是否有更多的Rails方法可以轻松完成此操作?
我的困难在于如何在一个视图中集成所有这些模型,而所有这些都发生在Student模型的show(view)中。
答案 0 :(得分:3)
如果您的所有模特(时间表,锻炼和锻炼)都是关联的,那么使用fields_for应该是个不错的选择。
从以上链接:
<%= form_for @person do |person_form| %>
First name: <%= person_form.text_field :first_name %>
Last name : <%= person_form.text_field :last_name %>
<%= fields_for :permission, @person.permission do |permission_fields| %>
Admin? : <%= permission_fields.check_box :admin %>
<% end %>
<%= f.submit %>
<% end %>
阅读guides。
答案 1 :(得分:3)
如果您正在实施类似profile
/ edit
页面的内容(您可以同时保存所有记录),我会看到的两种方法是通过以下方式保存表单Ajax,或使用单个submit方法来处理它们
<强>的Ajax 强>
ajax方法将是最常规的方法:
- 您提交的每个表单都会在后端转到表单自己的
update
方法- 每个表单可以由一个按钮处理,但最好将它们拆分
醇>
#app/controllers/profile_controller.rb
def edit
@schedules = Schedule.all #-> not sure how many records you're using
@workouts = Workout.all
@exercises = Exercise.all
end
#app/views/profile/edit.html.erb
<%= form_for @schedule do |f| %>
<%= f.text_field :test %>
<% end %>
# -> other forms
<%= button_to "Save", "#", id: "save" %>
#app/assets/javascripts/application.js
$("#save").on("click", function() {
$("form").submit(); // we'll have to define the form to submit
});
<强>单强>
如果您将所有表单作为一个提交,则必须将它们全部包含在一个表单中,因为发送不同的错误。这可以通过使用 _ 来实现,并通过循环遍历不同的参数在后端处理,单独保存每个参数。
我会这样做:
#app/controllers/application_controller.rb
def submit
types = %w(schedules exercises workouts)
for type in types do
type.constantize.update_attributes()
end
end
这允许您创建一个表单,其中包含在同一操作中提交的不同数据类型:
#app/views/profile/edit.html.erb
<%= form_tag profile_submit_path do %>
<%= fields_for @schedules do |f| %>
<%= f.text_field :title %>
<% end %>
# -> fields_for for the other objects
<% end %>
这将允许您将更新的对象发送到控制器,允许他们提交
答案 2 :(得分:0)
您可以使用一些简单的JavaScript来迭代所有表单标记并提交每个表单标记。
或者,如果您打算使用javascript,则可以在更改任何字段时遵循AJAXish自动保存方法。
但我认为如果您使用fields_for为多个模型创建一个表单可能会更清晰。