我有一个名为个人用户的动作每页pdf,它与两个模型进行通信,用户模型从数据库中检索信息,但仅针对所有用户的特定信息,然后获取信息并将其发送到模型报告然后,当我检查每个用户的属性时,它以我没有从模型用户调用它的方式显示,它采用每一对并以不同的顺序放置它,所以当我在pdf上写一个表的信息时它显示它很糟糕,像首字母可能是我的表的最后一条记录,手机可能是第一个...我必须为每个用户的信息创建一个新的页面..
我的报告代码看起来像:
def self.generate_individual_pdf(人,居民,用户,遗产=无,标题=无)
pdf = PDF::Writer.new
title = !title ? "Report" :title
pdf.select_font "Times-Roman"
pdf.text "<em>Compiled By: #{user.presentation_name}</em> <em>Estate: #{estate.name}</em> <em>Created On: #{Time.now.strftime('%d/%m/%Y %H:%M')}</em>", :justification => :center
x = 0
25.times do
pdf.text ""+" "
x+=1
puts x
end
pdf.text "<em>User Report For: #{estate.name}</em> ", :font_size => 18, :bold => true, :justification => :center
if estate.logo
pdf.image "#{RAILS_ROOT}/public"+estate.logo.public_filename,:width => 100, :height => 100, :resize => 1.1, :justification => :center
end
y = 0
#loop people to create table for every person
people.each do |p|
pdf.start_new_page
pdf.text" "+p.Title.to_s+" "+p.Firstname.to_s+" "+p.Lastname.to_s, :font_size => 12, :justification => :center
pdf.text ""+" "
pdf.text ""+" "
pdf.text "Please verify if your details below are correct, and rectify them in the third column of the table.", :font_size => 8
pdf.text ""+" "
table = PDF::SimpleTable.new
table.column_order.push(*["head1","head2","head3"])
headings = ["head1","head2","head3"]
headings.each do |h|
table.columns[h] = PDF::SimpleTable::Column.new(h)
table.columns[h].heading = h.humanize
end
#display tables
table.show_headings = false
table.orientation = :right
table.position = :left
data = []
p.attributes.each_pair do |h|
data << { "head1" => h[0], "head2" => h[1], "head3" => " "}
end
table.data.replace data
table.render_on(pdf)
i = 0
28.times do
pdf.text ""+" "
i+=1
puts i
end
pdf.text "Kind Regards"+ " "+p.Title.to_s+" "+p.Firstname.to_s+" "+p.Lastname.to_s, :font_size => 11
pdf.text ""+" "
pdf.text "Signature "+"......................................."
end
然后它在p.attribute.each_pair do | h |循环时产生输出 数据&lt;&lt; {“head1”=&gt; h [0],“head2”=&gt; h [1],“head3”=&gt; “这应该是零”} 端
请伙计们,我一直在尝试使用所有这些排序但我无法得到正确的答案。任何人都可以提供帮助请感到自由..提前感谢。
答案 0 :(得分:0)
红宝石中的哈希本质上是无序的物体。您无法保证按照您输入的顺序从中获取数据。
听起来这些属性对以随机顺序出现(或者至少不是你想要的顺序)。解决这个问题的一种可能方法是......
p.attributes.keys.sort do |key|
data << { "head1" => key, "head2" => p.attributes[key], "head3" => nil }
end
这将返回按值名称
按字母顺序排序的所有属性答案 1 :(得分:0)
Ruby 1.9将包含有序哈希,但是如果你是1.8,那么看看ruby facets中的字典类。 (http://facets.rubyforge.org/doc/api/more/classes/Dictionary.html)
这帮助我在过去做到这一点。