[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]