Я пробовал много вариантов этого:
builder = Nokogiri::HTML::Builder.new do |doc| doc.html { doc.body { links.each do |i| doc.p { doc.text "#{i.text}" } doc.a["href"] = i[:href] end } } end
Где links - это массив, в котором есть значения, необходимые для test и :href.
links
test
:href
Что это дает (сокращенно для краткости):
This is the HTML generated <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body> <p>10 ∙ Progamer Lim Yohwan, the E-Sports Icon</p> <a href="http://boxerbiography.blogspot.com/2006/12/10-progamer-lim-yohwan-e-sports-icon.html"></a>
Где то, что я хочу, чтобы это было сделано:
<p><a href="http://boxerbiography.blogspot.com/2006/12/10-progamer-lim-yohwan-e-sports-icon.html">10 ∙ Progamer Lim Yohwan, the E-Sports Icon</a></p>
Как мне это сделать?
мю правильно, но разве не так лучше?
builder = Nokogiri::HTML::Builder.new do |doc| doc.html do |html| html.body do |body| links.each do |i| body.p do |p| p.a i.text, :href => i[:href] end end end end end
С помощью интерфейса Builder атрибуты предоставляются в качестве аргументов для вызова doc.tagname, и содержимое передается внутри блока. Так что-то вроде этого должно сделать свое дело:
doc.tagname
builder = Nokogiri::HTML::Builder.new do |doc| doc.html { doc.body { links.each do |i| doc.p { doc.a(:href => i[:href]) { doc.text i.text # or maybe i[:text] } } end } } end