使用nested_form和bootstrap表没有正确的样式

时间:2013-04-03 04:12:11

标签: ruby-on-rails nested-form-for

我有以下代码在我的发票模型中创建嵌套模型(invoice_line_items):

    = nested_form_for @invoice, mutipart: true, class: "form-horizontal" do |f|

    ...

    %table.table.table-bordered{:id => "line-items"}
      %thead
        %tr
          %th
          %th Description
          %th Quantity
          %th Rate
      %tbody
        %tr
          = f.fields_for :invoice_line_items do |line_item|
            %td= line_item.link_to_remove "X"
            %td= line_item.text_field :description
            %td= line_item.text_field :quantity, :class => "input-mini"
            %td= line_item.text_field :rate, :class => "input-mini"
    = f.link_to_add "Add", :invoice_line_items, :data => { :target => "#line-items" }

我有两个问题:1)当我通过单击“添加”添加新行时....它与表格格式不匹配,并且不会插入到表格中。我尝试了一切让它发挥作用,但事实并非如此。我也尝试在他的宝石文档中添加ryanb提到的“:target”。 2)我想在发票页面上为用户准备好3个invoice_line_items,但我不知道该怎么做。

编辑:因为我一直在玩它,所以我现在有点不同了。我不认为我现在做得不错,但现在每次点击“添加”时它都会创建一个新表单:

    .row-fluid
  = f.fields_for :invoice_line_items, :wrapper => false do |line_item|
    %table.table.table-bordered#tasks
      %thead
        %th
        %th Description
        %th Quantity
        %th Rate
      %tr.fields
        %td= line_item.link_to_remove "X"
        %td= line_item.text_field :description
        %td= line_item.text_field :quantity, :class => "input-mini"
        %td= line_item.text_field :rate, :class => "input-mini"
  .row-fluid
    = f.link_to_add "Add", :invoice_line_items, :data => { :target => "#tasks" }

1 个答案:

答案 0 :(得分:1)

这是一个很难理解的问题,但事实证明,最新版本的nested_form.js文件没有附带最新版本的nested_form.js文件(尽管文档中说使用此函数) 。因此,要使其工作,我必须将其添加到我的application.js:

$(function ($) {
  window.NestedFormEvents.prototype.insertFields = function(content, assoc, link) {
    var target = $(link).data('target');
    if (target) {
      return $(content).appendTo($(target));
    } else {
      return $(content).insertBefore(link);
    }
  };
});

这覆盖了jquery_nested_form.js中的函数,现在一切正常。