page.insert_html没有插入带有link_to_function(rails)的html

我正在试图在Ruby On Rails中做一个复杂的表单。 它应该分组,每个组应该有文本字段。 我想要添加和删除组和文本字段。

我已经设法将文本字段添加并删除,但我完全无法对组进行相同操作。

这是对函数的调用:

 'group' end %> 

因此,它应该将名为“group”的部分添加到“groups”div中,对吗? 好吧,它没有。 这是部分:

 

Text Group

'text' %>

如果我点击“添加新组”链接,Firebug会告诉我有一些错误,例如某些javascript代码无效(错误在属性列表后“丢失”)。 但是,如果我删除部分代码中的第四行(具有“add_text_link”function的那一行),它的工作完美! 而且这个function很完美。

那么,任何想法?

谢谢你的帮助!

编辑:这是生成的源代码:

 

Main elements

(mandatory)

(optional)

Add new group

Text Group Add a text field Remove text group

Text Importance Notes Highlighted text Normal text Remove text field

我成功地完成了这项工作。 在我看来,这是Rails中的一个错误,因为使用了escape_once而不是html_escape。 换句话说,第一个link_to_function被转义,但第二个不是,因为该字符串已经被转义。 这使得反向操作(去逃逸或其他)不起作用。 您可以将此代码添加到初始化程序以始终转义:

 module ActionView module Helpers module TagHelper private def tag_options(options, escape = true) unless options.blank? attrs = [] if escape options.each do |key, value| next unless value key = key.to_s value = BOOLEAN_ATTRIBUTES.include?(key) ? key : ERB::Util::html_escape(value) attrs << %(#{key}="#{value}") end else attrs = options.map { |key, value| %(#{key}="#{value}") } end " #{attrs.sort * ' '}" unless attrs.empty? end end end end end 

此代码可能会破坏内容,因此请谨慎使用。 但是,我读过可能在Rails 3.0中更改了escape_once,所以请保持手指交叉;)

你做错了。 这最终会在HTML属性中插入转义的部分转义和转义字符串。 那简直就是邪恶。 它有很多方法可以打破。

您可能想要考虑一种更简单的方法。 将render :partial放在link_to_function 'Add a group'之上。 使div#group隐藏,然后链接到$('group').show()

换句话说,将其隐藏起来,然后使用JavaScript显示它,而不是将其插入DOM中。 更简单,更不容易出错。