Ruby on rails 如何在Rails中构建运行价值?
这是动态创建XML的XML函数:Ruby on rails 如何在Rails中构建运行价值?,ruby-on-rails,ruby,xml,nokogiri,xml-builder,Ruby On Rails,Ruby,Xml,Nokogiri,Xml Builder,这是动态创建XML的XML函数: def make_toc builder = Nokogiri::XML::Builder.new do |xml| xml.ncx( xmlns: "http://www.daisy.org/z3986/2005/ncx/", version: "2005-1", "xml:lang"=>"eng" ) do xml.head do xml.meta( content: book.uuid, name: "dtb
def make_toc
builder = Nokogiri::XML::Builder.new do |xml|
xml.ncx( xmlns: "http://www.daisy.org/z3986/2005/ncx/", version: "2005-1", "xml:lang"=>"eng" ) do
xml.head do
xml.meta( content: book.uuid, name: "dtb:uid")
xml.meta( content: "2", name: "dtb:depth")
xml.meta( content: "0", name: "dtb:totalPageCount")
xml.meta( content: "0", name: "dtb:maxPageNumber")
end
xml.docTitle do
xml.text_ book.full_title
end
xml.navMap do
i=0
self.oeb_parts.each do |section|
next if section.name.blank?
i = i + 1
xml.navPoint( id: section.uuid, playOrder: i.to_s) do
xml.navLabel do
xml.text_ section.name
end
xml.content(src: File.basename(section.file.path))
unless self.toc_json.nil?
toc = eval(self.toc_json)
prev_list = 0
value=''
toc.each do |toc_node|
if toc_node['part_id'].to_i == section.id.to_i
j=0
toc_node.each do |key, toc_part|
if key != "part_id" && key != "position" && key != "part_name"
value = ''
j=i+1
i=j
n = toc_part['list'] - prev_list
if n > 0
n.times {
value = value+"xml.navPoint( id: toc_part['id'], playOrder: j.to_s) do"
}
end
m = prev_list - toc_part['list']
if m > 0
m.times {
value = value+"end"
}
end
value = value+"xml.navLabel do
xml.text_ toc_part['value']
end
xml.content(src: File.basename(section.file.path)+'#'+toc_part['id'])"
prev_list = toc_part['list']
"#{value}"
end
end
end
end
m = prev_list - (-1)
if m > 0
m.times {
value=value+"end"
}
end
end
end
end
end
end
end
builder.to_xml
end
如何执行
if n > 0
n.times {
value = value+"xml.navPoint( id: toc_part['id'], playOrder: j.to_s) do"
}
end
我想在循环中运行xml.navPoint(id:toc_part['id'],playOrder:j.to_s)do
。如果我不使用任何插值直接调用它,它会抛出一个“意外结束”错误
在视图文件中,我可以使用HTML\u safe
或raw将字符串转换为HTML。但在模型中,我不知道如何转换它
有谁能帮我解决这个问题吗?好的,我会尽可能让这个问题变得有建设性,但请看一些ruby编程教程。这个文件中有相当多的语法错误,您的实现对于您希望最终得到什么非常混乱。还有一些变量我没有定义,因为这个问题可能无法回答。(例如,
书
)
这条线是非常错误的。看起来您希望在末尾使用
do
调用块,但这不会在字符串中进行计算。而且value=value+
不是ruby的方式。也欢迎尝试其他解决方案。您的代码格式不正确。我正在重做它,以便指出问题所在,但您有未终止的字符串和太多的结束语句。
n.times {value = value+"xml.navPoint( id: toc_part['id'], playOrder: j.to_s) do"}
n.times do |i|
#i will contain the current iteration number as it loops through n
value << xml.navPoint( id: toc_part['id'], playOrder: j.to_s) do
#some other block here
end
end
value = value+"xml.navLabel do
xml.text_ toc_part['value']
end
"#{value}"