嵌套模型表单 – Railscast#196修订 – 通过jQuery添加字段无法正常工作

我正在遵循Railscast#196修订版 ,一切都基本上没问题,但我无法在嵌套表单中添加新字段。 “删除字段”function运行良好,但点击“link_to_add_fields”后,浏览器会跳转到页面顶部,并且不会显示新字段。

这个轨道广播已经有很多问题了,比如这里或这里 ,我试着阅读所有这些问题,但大多数是指2010年的原始演员。我现在被困了几个小时,我不能弄清楚,我的问题在哪里。 对不起,如果它是一个新手的错误,我对rails很新。 任何帮助将非常感激!

我使用Rails 3.2.13,Ruby 1.9.3来遵循#196修订版

车型/ post.rb

class Post  :destroy accepts_nested_attributes_for :postfiles, allow_destroy: true end 

车型/ postfile.rb

 class Postfile < ActiveRecord::Base attr_accessible :dropbox, :gdrive, :post_id belongs_to :post end 

意见/职位/ _form.html.erb

       

意见/职位/ _postfile_fields.html.erb

 

postfiles.js.coffee

 jQuery -> $('form').on 'click', '.remove_fields', (event) -> $(this).prev('input[type=hidden]').val('1') $(this).closest('fieldset').hide() event.preventDefault() $('form').on 'click', '.add_fields', (event) -> time = new Date().getTime() regexp = new RegExp($(this).data('id'), 'g') $(this).before($(this).data('fields').replace(regexp, time)) event.preventDefault() 

application_helper.rb

 module ApplicationHelper def link_to_add_fields(name, f, association) 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 + "_fields", f: builder) end link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")}) end end 

提前,非常感谢你的帮助!

更新:我使用的是简单forms。 请参阅上面的_form文件。 这可能是个问题吗?

更新II:

我收到一个Javascript错误,不确定这可能是问题的问题:Chrome称之为“Uncaught SyntaxError:Unexpected reserved word”,Firebug称之为“SyntaxError:unterminated string literal”。 该错误指向此js代码部分:

 loadData: function(data){ this.$editor.addClass('st-block__editor'); this.$editor.html(" 
"); },

更新3:

post控制器可以成为问题的一部分吗?

这是我的posts_controller.rb

 def new @post = current_user.posts.new @post.postfiles.build respond_to do |format| format.html # new.html.erb format.json { render json: @post } end end 

再次感谢你的帮助!

我通过事故Railscast#403在Dynamic Forms上找到了 ,其中嵌套表单也是教程的一部分。 Ryan在本集中使用了javascript部分的编辑代码,使代码与Turbolinks兼容。 我在postfiles.js.coffee中尝试了下面的版本并且它有效! 添加字段链接最终生成新字段。

 $(document).on 'click', 'form .remove_fields', (event) -> $(this).prev('input[type=hidden]').val('1') $(this).closest('fieldset').hide() event.preventDefault() $(document).on 'click', 'form .add_fields', (event) -> time = new Date().getTime() regexp = new RegExp($(this).data('id'), 'g') $(this).before($(this).data('fields').replace(regexp, time)) event.preventDefault() 

你应该注意单数和复数forms。 模型的文件名应该是postfile.rb而不是postfiles.rb

同样适用于_postfiles_fields.html.erb ,它应该是_postfile_fields.html.erb

所以,基本上函数找不到模板,因为它是复数而不是单数forms,但它以单数forms调用。 改变这一点,你应该没事。 其余代码看起来不错。