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/