rails:2310
From: "SHIMADA Koji" <snoozer.05@g...>
Date: Fri, 3 Aug 2007 15:24:17 +0900
Subject: [rails:2310] Re: 動的プログラミング?
しまだと申します。 > 次のようなプログラムを書きましたが、どう見ても長たらしくてDRYの原則に反しています。 > もっとスマートなコードにしたいのですが,どのような方法があるでしょうか。 参考になるかわかりませんが、以下にいくつか提案してみます。ご参考になれば幸いです。 ・最初にレコードを全て取得しておいて、イテレータで回してみてはいかがでしょうか。 ・Table2にkigyo_bango、uketsuke_nen、uketsuke_bangoを引数にとるコンストラクタを作成されてはいかがでしょうか。 ・1999〜2007の条件分岐では分岐の中ではuketsuke_nenとuketsuke_bangoの値を決定するのみとして、分岐を抜けたあと一箇所でuketsukeのnewとsaveを行うようにしてはいかがでしょうか。 07/08/03 に osamu OHSHIMA<ohshima@p...> さんは書きました: > > 大島と申します。 > ActiveRecordの使いかたというよりは、Rubyプログラミングの問題ですが > どなたか教えてください。 > > Excelから持ってきたtable1sを、データベースとして使い易いtable2sに変換する場合 > table1s > +-------------+---------+------+-----+---------+----------------+ > | Field | Type | Null | Key | Default | Extra | > +-------------+---------+------+-----+---------+----------------+ > | id | int(11) | NO | PRI | NULL | auto_increment | > | kigyo_bango | int(11) | NO | | | | > | uke1999 | int(11) | YES | | NULL | | > | uke2000 | int(11) | YES | | NULL | | > | uke2001 | int(11) | YES | | NULL | | > | uke2002 | int(11) | YES | | NULL | | > | uke2003 | int(11) | YES | | NULL | | > | uke2004 | int(11) | YES | | NULL | | > | uke2005 | int(11) | YES | | NULL | | > | uke2006 | int(11) | YES | | NULL | | > | uke2007 | int(11) | YES | | NULL | | > +-------------+---------+------+-----+---------+----------------+ > uke????には、その年の受付番号が入っている > > table2s > +----------------+---------+------+-----+---------+----------------+ > | Field | Type | Null | Key | Default | Extra | > +----------------+---------+------+-----+---------+----------------+ > | id | int(11) | NO | PRI | NULL | auto_increment | > | kigyo_bango | int(11) | NO | | | | > | uketsuke_nen | int(11) | NO | | | | > | uketsuke_bango | int(11) | NO | | | | > +----------------+---------+------+-----+---------+----------------+ > > 次のようなプログラムを書きましたが、どう見ても長たらしくてDRYの原則に反しています。 > もっとスマートなコードにしたいのですが,どのような方法があるでしょうか。 > > require "rubygems" > require_gem "activerecord" > ActiveRecord::Base.establish_connection(省略) > class Table1 < ActiveRecord::Base > end > class Table2 < ActiveRecord::Base > end > > uketsuke_moto=Table1.new > i=1 > while uketsuke_moto= Table1.find(i) > if uketsuke_moto.uke1999!=0 then > uketsuke = Table2.new > uketsuke.kigyo_bango=uketsuke_moto.kigyo_bango > uketsuke.uketsuke_nen=1999 > uketsuke.uketsuke_bango =uketsuke_moto.uke1999 > uketsuke.save > end > #以下2000年から2007年までの同じルーチンが年数分だけ繰り返し入る > if uketsuke_moto.uke2007!=0 then > uketsuke = Table2.new > uketsuke.kigyo_bango=uketsuke_moto.kigyo_bango > uketsuke.uketsuke_nen=2007 > uketsuke.uketsuke_bango =uketsuke_moto.uke2007 > uketsuke.save > end > i=i+1 > end > > -- > ML: rails@r... > 使い方: http://QuickML.com/ > -- [ Event Info ] <絶賛企画中> Ruby勉強会札幌 第5回 <絶賛企画中> Ruby Sapporo Night vol.2 -- 島田浩二(snoozer.05@g...) URL : http://iddy.jp/profile/snoozer05/ -- ML: rails@r... 使い方: http://QuickML.com/
2307 2007-08-03 06:26 [s-kuri@s... ] 参加します 2309 2007-08-03 08:06 ┗[ohshima@p... ] 動的プログラミング? -> 2310 2007-08-03 08:24 ┣[snoozer.05@g... ] 2311 2007-08-03 09:04 ┃┗[ohshima@p... ] 2312 2007-08-03 09:13 ┗[hisano@s... ] 2313 2007-08-03 09:45 ┗[ohshima@p... ] 2314 2007-08-03 09:53 ┣[snoozer.05@g... ] 2315 2007-08-03 10:03 ┃┗[ohshima@p... ] 2316 2007-08-03 12:48 ┗[sakuro@e... ] 2317 2007-08-03 14:16 ┗[ohshima@p... ]