Rails在表单中形成部分形式

时间:2013-12-23 23:07:23

标签: ruby-on-rails

我有一个Rails应用程序,其中包含属于供应商的费用。

当用户添加新的费用时,他们可能需要添加新的供应商。

我以为我可以在费用表单中添加一个按钮和一个供应商。

像这样:

<%= simple_form_for @expense, :html => {:class => 'form-horizontal'} do |f| %>
  <div class="span5">
  <a data-toggle="modal" href="#vendorform">
    <p class="pull-right btn btn-primary btn-mini">New Vendor</p></a>
    <%= render :partial => "vendors/vendorform" %>
  </a>
  <%= f.association :vendor, :label_method => :vendor_name, :label => 'Vendor', collection: Vendor.order('vendor_name ASC') %>

_vendorform.html.erb如下所示:

<div id="vendorform" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="vendorformLabel" aria-hidden="true">
<div class="modal-header">
<a class="close" data-dismiss="modal">&#215;</a>
<h4 id="vendorformLabel">Add Vendor</h4>
</div>
<div class="modal-body">
<%= simple_form_for Vendor.new do |f| %>
      (bunch of fields)
    </div>
    <div class="modal-footer">
      <%= f.submit 'Save Vendor', :class => 'btn btn-mini btn-primary' %>
      <a class="btn btn-mini" data-dismiss="modal" href="#">Close</a>
<% end %>
</div>
</div> 

这部分显示OK。但是,供应商记录无法创建。 部分的提交实际上以某种方式触发了费用的提交。页面返回时所有必需的费用字段为红色。

我认为当按下Vendor partial中的f.submit按钮时,它会发布到Expenses控制器!!!

我是否需要费用控制器中的某些内容?

或者有更好的方法吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您确定供应商部分与费用表单位于同一文件夹中吗?如果没有,你应该

<%= render :partial => "folder/vendorform" %>

答案 1 :(得分:0)

如果您有嵌套属性,则应使用有助于管理关联的simple_fields_for方法。然后,删除供应商表单的提交按钮,并将其添加到费用表单中。所以供应商表格是 -

<div class="modal-body">
  <%= simple_form_for Vendor.new do |f| %>
  (bunch of fields)
  <% end %>
</div>