突然の 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")」
でエラーになる。
windows と Ruby 2.0 と Rails 4.0 ではだめなのか― (>_<
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 にいちいち手で制約とか書いていかないといけないのか、、、、
うーん。いまいち。