Javascript 以嵌套形式动态生成的字段添加了两次Rails
我有两种型号,第一种是授权,第二种是规格。Specs有两个字段:不合格和合格,并嵌套在grants中。我几乎所有的设置都很好,但我需要帮助修改JQuery,因为每次单击“添加不合格项”,也会添加合格项。它没有显示在窗体上,但在我的“显示”视图中它确实显示为一个空白项目符号。当我回到编辑窗体时,我看到了空白字段的资格。如果我在两个字段中输入新文本,则会保存正确的文本。我希望能够添加一个字段而不自动添加另一个字段。我的jQuery和助手代码来自RailsCastPro#196嵌套模型表单。我是rails新手,尤其是jQuery,因此非常感谢您的帮助Javascript 以嵌套形式动态生成的字段添加了两次Rails,javascript,jquery,ruby-on-rails-4,nested-forms,nested-attributes,Javascript,Jquery,Ruby On Rails 4,Nested Forms,Nested Attributes,我有两种型号,第一种是授权,第二种是规格。Specs有两个字段:不合格和合格,并嵌套在grants中。我几乎所有的设置都很好,但我需要帮助修改JQuery,因为每次单击“添加不合格项”,也会添加合格项。它没有显示在窗体上,但在我的“显示”视图中它确实显示为一个空白项目符号。当我回到编辑窗体时,我看到了空白字段的资格。如果我在两个字段中输入新文本,则会保存正确的文本。我希望能够添加一个字段而不自动添加另一个字段。我的jQuery和助手代码来自RailsCastPro#196嵌套模型表单。我是rai
jQuery ->
$('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()
和助手方法:
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(name.to_s.singularize + "_fields", f: builder)
end
link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")})
end
我想把我的解决方案分享给任何想做同样事情的人。我犯的错误是认为我可以在每个模型中有几个字段,但只能将其中一个字段保存到数据库中。但每次我添加一个字段时,它都会将整个记录与所有其他字段一起保存,即使这些字段为空。这就是为什么每次我添加资格时,我也会得到一个空白的“不合格”字段。解决方案是分解模型并为每个需要的字段创建新模型 因为我真正的目标只是列出合格和不合格的列表,所以我想出了另外两个简单处理格式的解决方案。第一种是使用富文本编辑器,另一种是使用.gsub在事件发生后添加格式。例如:
<p>
<strong>Eligibility:</strong>
<%= (@grant.eligibility).gsub(/[=+~]/, '=' => '<ul>','~' => '</ul>', '+' => '<li/>').html_safe %>
</p>
资格:
“”、“~”=>“
”、“+”=>”)。html\u safe%>