管理者用のdeviseユーザーを作成 で、モデル名.ymlを設置すれば、投入されるようにseeds.rbを書きましたが、環境毎(例えば、開発環境のみ)にという場合もあるので、seeds.rbを書き換えます。
パラメータ追加したりだと事故の原因になるので、環境変数名のパスに設置するようにします。
seeds.rbを改修
db/seeds.rbの9行目辺りのを変更
変更前
Dir.glob("#{Rails.root}/db/seed/*.yml").each do |filename| puts 'filename: ' + filename target_model = File.basename(filename, '.yml').classify.constantize puts 'model: ' + target_model.to_s File.open(filename) do |file_contents| yaml_contents = YAML.safe_load(file_contents) yaml_contents.each do |yaml_record| id = yaml_record['id'] if target_model.find_by(id: id) puts 'id: ' + id.to_s + ' ... Skip create' next end puts 'id: ' + id.to_s + ' ... Create' target_model.create(yaml_record) end end end
変更後
paths = ['', "#{Rails.env}/"] paths.each do |path| Dir.glob("#{Rails.root}/db/seed/#{path}*.yml").each do |filename|puts 'filename: ' + filename# こっちの方が見やすいので変更 puts "filename: #{filename}" target_model = File.basename(filename, '.yml').classify.constantizeputs 'model: ' + target_model.to_sputs "model: #{target_model}" File.open(filename) do |file_contents| yaml_contents = YAML.safe_load(file_contents) yaml_contents.each do |yaml_record| id = yaml_record['id'] if target_model.find_by(id: id)puts 'id: ' + id.to_s + ' ... Skip create'puts "id: #{id} ... Skip create" next endputs 'id: ' + id.to_s + ' ... Create'puts "id: #{id} ... Create" target_model.create(yaml_record) end end end end
開発環境のみ初期ユーザーをseedで作成
下記は、開発環境(development)ですが、
本番のみにしたい場合は、productionに設置してあげればOK。
db/seed/development/users.ymlを作成
- id: 1 email: user1@mydomain password: changepassword - id: 2 email: user2@mydomain password: changepassword
$ rake db:seed filename: db/seed/admin_users.yml model: AdminUser id: 1 ... Skip create filename: db/seed/development/users.yml model: User id: 1 ... Create id: 2 ... Create
【参考】ここまでのコミット内容
https://dev.azure.com/nightonly/rails-app-origin/_git/rails-app-origin/commit/254c5635a3ddcd1cbcb8f016788b4330acbbc6de