rails:3194
From: しん <dezawa@a...>
Date: Mon, 07 Sep 2009 17:57:54 +0900 (JST)
Subject: [rails:3194] model.find(:all)でトラぶっています
出沢です マスター関係のTableのダンプをCSVに取れるようにしてほしい、 という要望があり、[1]のようなソースを作り、動いていました。 システムへの機能追加要望をまかなうためにマスターが増えてきたので dump する対象をプログラムから吐き出して、configure エリアの ファイルに持たせたところ動かなくなりました。 原因がわからず立ち往生しております。 どのあたりを探ればよいものかご教授ください。 [1]のあと行ったことは (1) common.rb に MASTER_MODELS = [[Roll,"ロール"],[User,"ユーザー"], [Form,"フォーム"],[AllowBumon,"参照許可部門"], [Bumon,"部門一覧"] ] を追加し、 def dump の [Roll,User,Form].each{|model| 部分を Common:MSTER_FILES.each{|model,label| に変えたところ[2]のエラーで動かなくなりました。 不安定で、Rollも処理されないときと、Roll、Userが処理されて Formで とまるときがあります。 (2) この 配列の配列を直接記述し、 [[Roll,"ロール"],,,, [Bumon,"部門一覧"] ].each{|model,label| とすると動きます。 (3) ./script/console にて mc=MasterController.new mc.dump とやると、(1) でも動きます。 [1] require RAILS_ROOT+"/app/config/common.rb" class MasterController < ApplicationController def dumpmaster dump #glob_files respond_to do |format| @msg = "多分ダンプできたと思うから、#{Common::MASTER_CSV_DIR['dump']} を見てみて" format.html { render :action => 'done' } format.xml { render :xml => @document, :status => :created, :location => @document } end end def dump sufix = Time.now.strftime("%Y%m%d") [Roll,User,Form].each{|model| ofile = open(Common::MASTER_CSV_DIR["dump"]+"/#{model.to_s}_#{sufix}.csv","w") attrs = model.column_names records = model.find(:all) # print column names ofile.printf "%s\r\n", attrs.join(",") records.each{|rec| vals = attrs.map{|clm| rec[clm]} # userの場合は後ろにrollを追加 vals += rec.rolls.map(&:roll_no).flatten if model==User ofile.printf "%s\r\n",NKF.nkf("-s",CSV.generate_line(vals)) } ofile.close } end [2] TypeError in MasterController#dumpmaster can't dup NilClass RAILS_ROOT: /home/work Application Trace | Framework Trace | Full Trace /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:2189:in `dup' /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:2189:in `scoped_methods' /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:2193:in `current_scoped_methods' /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:2183:in `scope' /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:2414:in `set_readonly_option!' /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:610:in `find' /home/work/app/controllers/master_controller.rb:76:in `dump' /home/work/app/controllers/master_controller.rb:73:in `each' /home/work/app/controllers/master_controller.rb:73:in `dump' /home/work/app/controllers/master_controller.rb:22:in `dumpmuster' -- ML: rails@r... 使い方: http://QuickML.com/