合并两个表单rails

基本上我有像@ user1224344这样的问题:

如何在Rails中从同一页面提交多个重复的表单 – 最好只用一个按钮

第一个答案看起来很不错,但我作为rails初学者在我的项目中转换它有问题。 好吧,我有两个具有相同控制器的表单,只需一个提交按钮即可保存:

"canvascontent" %> Date.today %> 'btn btn-small btn-primary', :onclick => "sketch.toDataURL()" %>
"inputbox"%> Date.today %> 'btn btn-small btn-primary'%>

感谢帮助! 特别是在周日晚上(至少在德国这里)

你离我很近。

诀窍是两个表单应该嵌套在提交它们的表单中,这应该是另一个模型。 我不知道你的应用程序是如何组合在一起的,但我会假设患者有很多治疗方法。 你的模型应该包括:

patient.rb

 attr_accessible :treatments_attributes, etc... has_many :treatments accepts_nested_attributes_for :treatments 

treatment.rb

 belongs_to :patient 

如您所见, 患者接受其治疗的属性(因此该模型中的第三行和第一行)。 因此,您实际上需要将治疗表格包裹在患者表格中,以便您使用嵌套治疗方法提交患者表格。 像这样的东西:

 <%= form_for @patient do |f| %> <%= f.fields_for @patient.build_treatment do |tf| %> <%= render 'treatment_form', locals: { form: tf } %> <% end %> <%= f.fields_for @patient.build_treatment do |tf| %> <%= render 'treatment_form', locals: { form: tf } %> <% end %> <%= f.submit %> <% end %> 

因此,您已经为患者提供了一种表格,即提交两种治疗表格,自动与患者相关联。 我可能搞砸了那里的一些细节,但这是基本的想法。

编辑 – 你可能想看看这个 。 最好将处理表单对象的构建放在控制器中,就像在那个问题中那样。 您可能需要查看Rails API以获取有关accepts_nested_attributes_for的更具体帮助。

另外,如果不清楚,“本地”事物只是将处理表单对象传递给变量名称“form”下的partial,所以在那部分中,你要编写<%= form.label:whatever%>。 ..等等,在那部分内。

如果在控制器中构建表单对象 –

 @patient.build_treatments #may not be exactly this, but it's close 

– 然后你可以在你的视图中执行此操作:

 <%= f.fields_for :treatment do |tf| %> 

此外,如果不清楚 ,根据您的上述代码,您的部分将看起来像这样:

 
<%= form.collection_select :category_id, Category.find(:all), :id, :typ %> <%= form.text_field :content , :id => "inputbox"%> <%= form.text_field :day, :value => Date.today %>

其他可能更直观的布局:

主要观点

 <%= form_for @patient do |f| %> <%= render 'treatment_form', form: f %> <% end %> 

局部视图

 <%= form.fields_for :treatment do |field| %> <% field.label :whatever %> #... 

换句话说,你将调用到partial_for里面的fields_for,这可能更有意义。 实际上不应该改变真正有效的方式。