Как я могу отсортировать значения хеша, прежде чем напечатать их в pdf внутри таблицы - PullRequest
0 голосов
/ 18 июня 2009

у меня есть действие, называемое отдельным пользователем 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 | data << {"head1" => h [0], "head2" => h [1], "head3" => " это должно быть ноль "} конец

пожалуйста, ребята, я пытался использовать все эти виды сортировки, но я просто не могу получить правильный ответ .. тот, кто может помочь, пожалуйста, не стесняйтесь .. заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 19 июня 2009

Ruby 1.9 будет содержать упорядоченные хэши, однако, если вы используете 1.8, взгляните на класс словаря из рубиновых аспектов. (http://facets.rubyforge.org/doc/api/more/classes/Dictionary.html)

Это помогло мне сделать это в прошлом.

0 голосов
/ 18 июня 2009

Хэши в ruby ​​являются изначально неупорядоченными объектами. Вам не гарантируется получение данных из них в том же порядке, в котором вы их поместили.

Звучит так, будто пары атрибутов выходят в случайном порядке (или, по крайней мере, не в том порядке, в котором вы хотите). Один из возможных способов справиться с этим ...

p.attributes.keys.sort do |key|
  data << { "head1" => key, "head2" => p.attributes[key], "head3" => nil }
end

Это вернет вам все ваши атрибуты, отсортированные в алфавитном порядке по имени значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...