突然の Rails

突然の Rails

Rails のお仕事があったので、頑張る。

以下適当。いますんごい眠いんで超適当。メモ代わりに残す。




最初、DB 構造を考えて、ER 図書いて DDL でばーっとテーブル作ったんだけど、
Rails って DDL からテーブル作るんじゃなくて

> rails generate model Hoge code:ineteger name:string

みたいに、generate でテーブルを作って行く開発スタイルなんでしょうか?



もう、ER 図も作って、foreign key も貼って、DDL 作ったんだけどなぁ、、、
頑張って Rails の規則に沿ったテーブル名や項目名にしたのになぁ、、、
rails g model 、、、 ってテーブル分やらんといけないのかなぁ、、、、



ddl で DB にテーブル作っちゃったので、DB の情報から自動で Rails の model って作成できないのだろうか?

google 先生に聞いてみたところ、以下の情報にヒット


http://kagen88.blogspot.jp/2012/12/rails.html


Rails のクラス使って、DB 情報引っこ抜いて、rails g model hogehoge コマンドをつくればいいよ」って感じかしら。


ならば、と早速試すも、
「si_cols = ActiveRecord::Base.connection.columns(si_table_name,"#{name} Columns")」
でエラーになる。

windowsRuby 2.0 と Rails 4.0 ではだめなのか― (>_<


というわけで、載ってた Ruby スクリプトを変更。

Ruby 初めてだから超適当。すごい適当。
とりあえず DB からテーブル全部引っこ抜けぇ

def model_name(s)
  if s[-4..-1] == "ries" 
    s[0..-4] + "y" 
  elsif s[-1] == "s" 
    s[0..-2]
  else
    s
  end
end

def out_generate
  si_tables = ActiveRecord::Base.connection.tables()
  si_tables.each do |t|

    si_tname = model_name(t)
    si_cols = ActiveRecord::Base.connection.columns(t)
    si_field_names = Array.new;
    si_cols.each do |c|
      si_field_names << "#{c.name}:#{c.type}" if c.name != "id" && c.name != "created_at" && c.name != "updated_at" 
    end
    si_colparas = si_field_names.join(' ')

    puts "rails g scaffold #{si_tname} #{si_colparas}" 
  end
  return "";
end


コマンドプロンプトから

> cd [Rails プロジェクトのディレクトリ]
> rails console

rails のコンソールにして、上のコードを貼りつけ。


その後、out_generate() ってやれば

rails g scaffold user login_id:string name:string password:string

みたいな文字列がコンソールに表示されるから、コンソールの内容コピーして、
Rails コンソール抜けて、
貼りつけるといけるんじゃないだろうか。







でも、ER 図作る時に、一生懸命 Unique Kye とか Default とか付けたのに
model に反映されない。
foreign key も一生懸命付けたのに、model に反映されない。


さみしいなぁ。


生成された model にいちいち手で制約とか書いていかないといけないのか、、、、

うーん。いまいち。