0

我正在尝试从文档编号编写运行编号的代码,具有以下值

牢记数据:

   document_types records :
       {:document_type_code => 'PR', :running_no => 2, ...}
       {:document_type_code => 'SO', :running_no => 1, ...}

   transactions records :
       {:id => 1, :document_no=> 'PR000001', :document_type_code=> 'PR', ...}
       {:id => 2, :document_no=> 'SO000001', :document_type_code=> 'SO', ...}
       {:id => 3, :document_no=> 'PR000002', :document_type_code=> 'PR', ...}

该设计:

create_table :runnings do |t|
  t.string :document_type_code, :null => false, :limit => 2
  t.integer :running_no, :null => false, :default => 0
  ...
  t.timestamps
end

create_table :transactions do |t|
  t.string :document_no, :null => false
  t.string :document_type_code, :null => false, :limit => 2      
  ...
  t.timestamps
end

如何在 Transactions 中生成 document_no?

 document = Transaction.new
 document.document_type_code = 'PR'
 document.document_no = ??????
 ...
 document.save!
4

2 回答 2

2

使用 ruby​​ 方法 'next' :

irb(main):019:0> 'PR000001'.next
=> "PR000002"

你也可以使用方法'succ':

irb(main):022:0> 'PR000001'.succ
=> "PR000002"

看看链接:

http://www.devarticles.com/c/a/Ruby-on-Rails/Iterating-and-Incrementing-Strings-in-Ruby/3/

编辑:

您可以获得不一样的增量文档:

transaction = Transaction.last 
transaction.nil? 'PR000001' ? : transaction.document_no.succ
OR
transaction.nil? 'PR000001' ? : transaction.document_no.next

希望有所帮助。

于 2012-04-04T11:04:49.217 回答
0

您可以获得每个“document_type_code”的所有运行数字的计数,并将其从 1 递增

你可以为此写一个范围

高温高压

于 2012-04-04T11:47:15.900 回答