最近在学习ruby on rails中遇到一个问题,如何用一个<%= form_for%><%end%>标签,以及一个提交按钮,发送两个数据分别到不同的响应函数中,查了网上的一些资料,最后选择了以下的方法。
方法很简单,写俩个form_for函数,把第二个隐藏起来,然后在调用js,在点击第一个form_for 提交按钮的时候,触发第二个提交按钮事件。在form_for中有一个选项是:remote => true意思是是用ajax的方式提交数据,这样可以使页面保持在当前页面不刷新,以下代码会在第一个提交键中是用remote=>true。
比如:现在有两个表,一个班级的表,一个老师-班级表,现在我们要在一个窗口中给班级选择老师,我们现在要传递两个数据给不同的post函数,老师id给班级表,老师id和班级id给班级表,那么代码如下:
<%= form_for @teacher, :remote => true, :method => :put do |f| %>
<label>teacher</label>
<!--这里的select是一个下拉框,里边包含了所有的@teachers参数中的教师名字,以供用户选择-->
<%= f.select :teacher_id, @teachers,{}%>
<%= f.submit 'save', :id => 'update_teacher_id'%>
<% end %>
<% end %>
<%= form_for @teacher_class, :method => :post do |f| %>
<%= f.hidden_field :teacher_id, :value => @teacher.id %>
<%= f.hidden_field :class_id, :value => @class.id %>
<%= f.submit 'save', :id => 'submit_to_teacher_class', :style => 'display: none;'%>
<% end %>
<script type="text/javascript">
$('#update_teacher_id').click(function(){
$('#submit_to_teacher_class').trigger('click');
});
</script>
controller可以用默认生成的,无需做修改