嵌套表单的问题

时间:2017-07-05 22:01:33

标签: javascript jquery ruby-on-rails nested

我正在尝试创建一个完全可管理的网站,用户可以在其中填写一些技能(' css',' php',' ruby​​',你说出来的名字)。接下来,他们用百分比来填补他们对此的看法。

我打算在图表中显示结果,但现在我仍然坚持使用这种嵌套表格,我无法让它们显示出来。

正如我之前所说,你可以在一个名为settings的页面中添加你的技能,所以这就是我将它们链接在一起的方式:

skill.rb和setting.rb

class Skill < ApplicationRecord
  belongs_to :settings, optional: true
end

class Setting < ApplicationRecord
    has_many :skills, dependent: :destroy
      accepts_nested_attributes_for :skills, allow_destroy: true, 
      reject_if: proc { |att| att['name'].blank? }
# Other lines...

ApplicationHelper.rb

def link_to_add_row(name, f, association, **args)
    new_object = f.object.send(association).klass.new
    id = new_object.object_id
    fields = f.fields_for(association, new_object, child_index: id) do |builder|
      render(association.to_s.singularize, f: builder)
    end
    link_to name, '#', class: 'add_fields' + args[:class], data: { id: id, fields: fields.gsub('\n', '') }
  end

的application.js

$(document).on('turbolinks:load', function() {

    $('form').on('click', '.remove_skill', function(event) {
        $(this).prev('input[type="hidden"]').val('1');
        $(this).closest('div').hide();
        return event.preventDefault();
    });

    $('form').on('click', '.add_fields', function(event) {
       let regexp, time;
       time = new Date().getTime();
       regexp = new RegExp($(this).data('id'), 'g');
       $('.skills').append($(this).data('skills').replace(regexp, time));
       return event.preventDefault();
    });
});

视图/设置/ _form.html.erb

  <!-- Some other fields -->
  <table>
    <thead>
      <tr>
        <th></th>
        <th>Compétence</th>
        <th>Maîtrise</th>
      </tr>
    </thead>
    <tbody class="fields">
      <%= fields_for :skills do |builder| %>
        <%= render 'skill', f: builder %>
      <% end %>

      <%= link_to_add_row('Ajouter skill', f, :skills, class: 'add_skill') %>

    </tbody>
  </table>
  <!-- Some other fields -->

**视图/设置/ _skill.html.erb

<tr>
  <td>
    <%= f.input_field :_destroy, as: :hidden %>
    <%= link_to 'Delete', '#', class: 'remove_record' %>
  </td>
  <td><%= f.input :name, label: false %></td>
  <td><%= f.input :completed, label: false %></td>
  <td><%= f.input :due, label: false, as: :string %></td>
</tr>

我按照this video的说明操作,到目前为止,当我点击&#34;添加技能&#34;时,我可以看到我的嵌套表单在我的rails控制台中呈现,但是&# 39;全部。

我认为这只是我没有看到的内容,但我重复了两次教程,每次都有点不同,但是当我点击&#34;添加技能&#34;时,没有任何显示。

欢迎任何帮助!

1 个答案:

答案 0 :(得分:1)

要注意的一些事项。首先,这个功能:

$('form').on('click', '.add_fields', function(event) {
   let regexp, time;
   time = new Date().getTime();
   regexp = new RegExp($(this).data('id'), 'g');
   $('.skills').append($(this).data('skills').replace(regexp, time));
   return event.preventDefault();
});

正在寻找具有“技能”的元素。上课并将其附加在那里。除非我错过了,否则我没有看到上面的元素。

接下来,尝试禁用turbolinks,至少在调试时 - 我以前遇到过这个问题。

  1. 移除宝石&#39; turbolinks&#39;来自Gemfile的行。
  2. 从app / assets / javascripts / application.js中删除// = require turbolink。
  3. 删除两个&#34;数据 - turbolinks-track&#34; =&GT;来自app / views / layouts / application.html.erb的真正哈希键/值对。
  4. (来自blog.steveklabnik.com/posts/2013-06-25-removing-turbolinks-from-rails-4

    之后,投入一大堆

    console.log() 
    

    用于验证期望值的语句是您期望的,元素在运行时存在等。

    最后,我有一篇关于类似内容的帖子: Javascript nested forms for has_many relationships 哪个可能有用。