読者です 読者をやめる 読者になる 読者になる

Matthewの備忘録

忘れたときはここを見ろ。何か書いてある。

RoRで「テーブルごとに初期データを登録する」に補足

 とある自発的なプロジェクトのためにソフトウェア開発をしています。RoRを利用しているのですが、所謂車輪の際発明をしたくないので、先人のお知恵を拝借しているのですが、その一つに「テーブルごとに初期データを登録する」というテーマで解説記事とスニペット的に使えるソースコードが公開されていました。それは多くの記事に参照・引用されています:
d.hatena.ne.jp

 ほぼ同じ機能を有した Gem があるのですが、この記事のコードの方がセンスが良いのでプロジェクトに取り込みたいのですが、一つの注意点と、一つの問題があります。注意点というのは、テーブル毎に初期データを読み込ませる順番を考慮しないといけないことです。一つの問題というのは、著作者である紅孔雀さんにコンタクトがとれないことです。

注意点

 RoRでは、ヌルを許さないカラムに外部キー(外部参照キー)を使っていると、テーブルに情報をインサートする前に、参照先の外部キーが存在しているか SELECT 文を実行して確かめます。今回この記事で取り上げたスニペットでは、Dirクラスの実装に依存したファイル順(数字、記号、アルファベットの順?)にファイルを読み込み、それを初期データとして登録しようとします。偶然、Dirクラスが並べたファイル順で情報をインサートできることもあるでしょうが、大抵の場合は外部キーの参照先のテーブルに情報をインサートするファイルを先に読み込むようにしないといけません。これには二つの回避策があります。

  • ファイルの先頭に読み込み順を示す文字をつける(数字文字列など)。
  • ディレクトリのファイルをグロービングせずにload(ファイル名)を適切に並べる。

ファイルの先頭に読み込み順を示す文字をつける

 例えば、db/seeds に次のファイルがあるとします。

campus.rb contest.rb robot.rb

次のように順番を表す数字文字を先頭につけます。

03_campus.rb 01_contest.rb 02_robot.rb

つけておくことで、01_contest.rb、02_robot.rb、03_campus.rb の順で実行されます。

loadを並べる

 スニペットのようにグロービングさせずに、読み込ませたいファイルを羅列していきます:

load(contest.rb)
load(robot.rb)
load(campus.rb)

問題

 同じことをさせるのに、私がコードを書いても同じようなものになるので、そのまま取り込みたいとおもっています。例えばMITライセンスと書いてあれば、条件を守りつつ、こちらで勝手に取り込めます。しかし、そういったことは書いてないので、コンタクトを取りたいと思いましたが、メールアドレスやSNSなどのコンタクトアドレスが一切表示されていません。また、紅孔雀さんはこの数年記事を書いていないようです。ちょっと調べてみましたが、ネット上での消息は辿れませんでした。ライセンスの確認、または取り込みの承諾を頂きたいのですが、現状では叶いそうにありません。

 何方かご存知の方は居らっしゃいませんか?