0

好的,我的问题很简单,我在一个视图上有两个非常非常相似的表单,只有 id 有所不同:

<table width="100%">
<tr>
<%= form_for ([@patient, @patient.treatments.build]),:html => { :id => "my_form2" } do |f|%>
<th><%= f.collection_select :category_id, Category.find(:all), :id, :typ %></th>
<th><%= f.text_field :content %></th>
<th><%= f.hidden_field :note, :id => "canvascontent" %></th>
<th><%= f.text_field :day, :value => Date.today %></th>
<th><input type="button" value="Speichern" class = "btn btn-small btn-primary" id = "button1" onclick="sketch.toDataURL()"></th>
<th><input type="button" onclick="sketch.clearRecording()" class="btn btn-small btn-danger" value="Löschen"></th>
<% end %>
</tr>
</table>

<table width="100%">
<tr>
<%= form_for ([@patient, @patient.treatments.build]),:html => { :id => "my_form1" } do |f|%>
<th><%= f.hidden_field :category_id, :value => findems(Ebm) %></th>
<th><%= f.hidden_field :content , :id => "inputbox"%></th>
<th><%= f.hidden_field :day, :value => Date.today %></th>
<% end %>
</tr>
</table>

我想只用一个提交按钮触发两者的提交,所以我创建了一个按钮:

<input type="button" value="Speichern" class = "btn btn-small btn-primary" id = "button1" onclick="sketch.toDataURL()"

并同时触发两个表单的提交一个jquery函数:

$(document).ready(function() {
$("#button1").click(function(){
$('#my_form1').trigger('submit');
$('#my_form2').trigger('submit');
});

但它不会工作,rails 总是只保存在我的函数中首先触发的表单,在这种情况下是#my_form1。我认为我的控制器应该受到责备,因为在保存第一个表单后,它会重定向到另一个站点,因此不会保存第二个表单。但我是 Rails 初学者,不知道如何过度关注这种行为。我的控制器:

    def create
    @patient = Patient.find(params[:patient_id])
    @treatment = @patient.treatments.create(params[:treatment])
    redirect_to patient_path(@patient)
    end

我试图简单地删除控制器的最后一行,但随后出现错误:

 Missing template treatments/create,
4

1 回答 1

1

查看您的代码,我不确定您为什么要分别提交这两个表单...如果您真的想这样做,则可以使用第一个表单传递所有需要的参数,然后在其中使用这些参数你的控制器。

有了这些参数,您就可以对它们做任何您想做的事情,例如,包括从您的控制器构建另一个 @patient。

从您的代码中,我看到您正在使用params[:treatment]params[:patient_id]但我没有在您的#my_form1表单中看到这些参数。那些是怎么通过的?

于 2013-07-22T18:08:29.793 回答