我有一个3种形式,时间表,锻炼和练习的视图,每个表现都像编辑表单一样。并且在全部视图中提交(保存)按钮。Rails - 多种形式,不同的模型(对象),一个提交按钮
当我点击保存按钮。点击后应更新这些表单上更改的每个数据。
这是最好的解决方案是什么? Javascript更新每个数据分离?怎么做 ?是否有更多的Rails方法可以轻松完成此操作?
我的困难是如何将所有这些模型集成到一个视图中,而所有这些都发生在Student模型的show(view)中。
我有一个3种形式,时间表,锻炼和练习的视图,每个表现都像编辑表单一样。并且在全部视图中提交(保存)按钮。Rails - 多种形式,不同的模型(对象),一个提交按钮
当我点击保存按钮。点击后应更新这些表单上更改的每个数据。
这是最好的解决方案是什么? Javascript更新每个数据分离?怎么做 ?是否有更多的Rails方法可以轻松完成此操作?
我的困难是如何将所有这些模型集成到一个视图中,而所有这些都发生在Student模型的show(view)中。
如果所有模型(时间表,锻炼和练习)都相关联,则使用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。
你可以有一些简单的JavaScript迭代所有表单标签并提交它们中的每一个。
或者,如果您打算使用JavaScript,则可以在更改任何字段时遵循AJAX自动保存方法。
但是我认为如果你只有一个表格的多个型号,使用fields_for可能会更清洁。
如果您正在实施类似于profile
/edit
页面(您可以在其中一次保存所有记录),我会考虑的两种方式是通过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 %>
这将允许您发送更新对象到你的控制器,允许他们提交
尝试使用Javascript。不起作用,正在寻找SO的解决方案,并且人们说第一个解决方案只会提交最后一个表格。顺便说一句,我不得不使用$()。each(..),因为所有的形式。我的主要问题是因为这些字段在表格中,对于开始,我有6个时间表(每个都不相同)的复选框,6个表格。去尝试别人的解决方案。但感谢您的答案。 – cassioscabral
也试过了。我点击了提交按钮,什么都没有发生。一名学生有很多时间表,有许多锻炼,每次锻炼都有很多锻炼。感谢你的回答。我正在尝试使用JavaScript,因为我的观点非常复杂。 – cassioscabral
没有解决我的情况。但那会是简单的方法。我只会使用AJAX调用,而不是表单,这对我来说更合适。 – cassioscabral