gpt4 book ai didi

jquery - 嵌套模型表单 - Railscast #196 修订 - 通过 jQuery 添加字段不起作用

转载 作者:行者123 更新时间:2023-12-01 00:56:46 29 4
gpt4 key购买 nike

我正在关注Railscast #196 revised一切都基本上顺利,但我无法向嵌套表单添加新字段。 “删除字段”功能效果很好,但点击“link_to_add_fields”后,浏览器跳转到页面顶部,没有出现新字段。

这个 Railscast 已经有很多问题,比如 herehere ,我尝试全部读完,但大多数都指的是 2010 年的原版 Actor 阵容。我现在被困了几个小时,我不知道我的问题出在哪里。抱歉,如果这是一个菜鸟错误,我对 Rails 还很陌生。任何帮助将不胜感激!

我正在关注#196修订版本,使用Rails 3.2.13,Ruby 1.9.3

模型/post.rb

class Post < ActiveRecord::Base
attr_accessible :content, :title, :image, :postfiles_attributes
has_many :postfiles, :dependent => :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

views/posts/_form.html.erb

<%= simple_form_for @post do |f| %>

<%= f.fields_for :postfiles do |builder| %>
<%= render 'postfile_fields', f: builder %>
<% end %>
<%= link_to_add_fields "Add File", f, :postfiles %>

<% end %>

views/posts/_postfile_fields.html.erb

<fieldset>  
<%= f.text_field :dropbox %>
<%= f.hidden_field :_destroy %>
<%= link_to "remove", '#', class: "remove_fields" %>
</fieldset>

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

首先,非常感谢您的帮助!

更新:我正在使用简单形式。请参阅上面的 _form 文件。这会是一个问题吗?

更新二:

我收到一个 Javascript 错误,不确定这是否是这里问题的一个问题:Chrome 称之为“Uncaught SyntaxError:意外的保留字”,Firebug 称之为“SyntaxError:未终止的字符串文字”。错误指向这段js代码部分:

loadData: function(data){

this.$editor.addClass('st-block__editor');

this.$editor.html("
<div class='st-block__inner'>
<div class='media'>
<a class='pull-left' >
<img class='media-object link-pic' src='" + data.thumbnail_url + "'>
</a>
<div class='media-body'>
<div class='link-source'>" + data.provider_name + "</div>
<div class='link-title'> <a href='#'>" + data.title + "</a></div>
<div class='link-description'>" + data.description + "</div>
</div>
</div>
</div>
");
},

更新3:

帖子管理员可能是问题的一部分吗?

这是我的 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 on 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()

关于jquery - 嵌套模型表单 - Railscast #196 修订 - 通过 jQuery 添加字段不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20136241/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com