※ ruby 初心者です
###やりたいこと
Rails 新規サーバーの初期データ挿入を行うために
INSERT INTO `role` VALUES (1,'ADMIN'),(1,'USER') ... INSERT INTO `groups` VALUES (1,1),(1,2) ...
みたいな sql 文をかいたのですが
Rails 上では SQL ではなく seeds.rb でかくべきみたいなので
Role.create(role_id:1,role_name:'ADMIN') : Groups.create(group_id:1,role_id:1) Groups.create(group_id:1,role_id:2) :
のような ActiveRecord 生成文に置換したいです
###ためしたこと
require 'mysql2' client = Mysql2::Client.new(...) table_query = "select table_name from information_schema.tables where table_schema = '...';" #puts table_query client.query(table_query).each do |column| #puts column #puts column["table_name"] query = "select * from #{column["table_name"]};" #puts query client.query(query).each do |row| str = '' row.each do |key, value| str += ',' if str != '' str += "#{key}:'#{value}'" end puts column["table_name"].classify + '.create(' + str + ')' end end
このような ruby script をかいたのですが
テーブル名 role => Role のようにキャメライズする関数が Rails 固有のものらしく
コマンドラインから Rails 内のメソッドをよぶにはどうしたらいいでしょうか
bundle exec ruby test.rb と実行しても .classify が undefined になります
また int 型の場合も '' で囲んでしまうために型エラーになると思われます
データベースの型を認識する簡単な方法はないでしょうか
このような MySQL のレコードを create 文に変換するには自前でかくしかないのでしょうか
###環境
ruby: 2.2.0
rails: 4.1.3
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/05 06:58
2018/10/05 07:00
退会済みユーザー
2018/10/05 07:51