[前][次][番号順一覧][スレッド一覧]

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...        ]