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

トランザクションで 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からインクリメントできます。

このためのスコープを書くことができます

HTH

于 2012-04-04T11:47:15.900 に答える