2011年1月28日金曜日

text_fieldをdisabledにすると、その項目は保存されなかった。



環境:rails2.3.8


表題の通り。



<%= p.text_field field_cd, :disabled => true %>


この場合、readonlyに変えてやるとちゃんと保存してくれる。



<%= p.text_field field_cd, :readonly => true %>





2011年1月18日火曜日

クライアントがFireFoxでアクセスしたときのみInternal Server Errorが発生



環境:rails 2.3.8


windows2003serverでのrailsデプロイの際、クライアントがFireFoxでアクセスしたときのみInternal Server Errorが発生しました。


といっても必ずInternal Server Errorが出るのでは無く、正しく表示されたり、CSSが適用されていないような、おかしな表示をしていました。



Internal Server Error
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.


仕方ないので地道にどのソースが影響しているのか、切り分けながら探していきました。


そうしたらどうも、<%= javascript_include_tag :defaults, :cache => true %>が引っかかります。


:defaults指定なので、prototype.jsなどの構成ファイルを調べたところ、application.jsを外すとうまく動きました!



でもapplication.jsって・・・



\public\javascripts\application.js

// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults



コメントしかない(^^;


まぁ、仕方ないので、application.jsを読み込ませないように修正して進めてみます。





2011年1月11日火曜日

windows環境(Instantrails)で、文字コードをShift-jisに切り替える



環境:rails2.3.8


今、既存DBを元にrails開発出来るかテストしているのですが、テーブル名と項目名が日本語で定義されており、文字コードに絡んだエラーがでるのでその対策です。


まずはデータベースの定義を修正


database.yml



development:
adapter: oracle_enhanced
database: XE
username: system
password: *******
encoding: sjis


次に環境設定


environment.rb



Rails::Initializer.run do |config|
config.action_controller.default_charset='Shift_JIS'
end
$KCODE = "s"


最後にHTML側の修正



<head>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS" />
<title>test: <%= controller.action_name %></title>
<%= stylesheet_link_tag 'scaffold' %>
</head>


また、確認中はブラウザのキャッシュが残ったままで、ソースを変更しても反映されない場合があるので、あれ?変わらないな?と思ったら、一度キャッシュをクリアした方がいいです。





2011年1月7日金曜日

rubyでexcelするためのspreadsheetを試すもうまく行かず。



railsで、エクセルテンプレートを読込み、値を貼付けて、エクセルを返す処理を行うことになりました。


調べたところ、windowsでもlinuxでもoffice無しで動く、spreadsheetを試してみました。


しかし、出力したファイルが破損しているのか、開くときにエラーが出てしまいます。


小さな表くらいだと大丈夫だけど、大きめの表などファイルサイズが大きくなると破損するように見えました。


かなり調べてみたけど解らず。


あきらめてwin32oleというのを使おうかなぁ。


追記:


 一旦はあきらめましたが、どうにもあきらめきれずに追加調査してみました。


 地道にうまく行くパターンと行かないパターンを切り分けて調べたんです。


 そしたら少し解ったことが。


 値の設定を行うときにどうも破損するのは解ってたのですが、100%では無い。


 例えば、これを1行だけ設定した場合、破損しますが、



sheet1[8,5] = "125"



 これは破損しません



sheet1[0,0] = ""



 書式とかセル結合の問題かと思いましたが、最初の設定でもこう書けば通りました!



sheet1[0,0] = ""


sheet1[1,0] = ""


sheet1[2,0] = ""


sheet1[3,0] = ""


sheet1[4,0] = ""


sheet1[5,0] = ""


sheet1[6,0] = ""


sheet1[7,0] = ""


sheet1[8,5] = "125"



 どうも、1行目から順に値を設定しないといけないみたいですね(^^;


 いきなり8行目に値を入れようとすると、ファイルが破損します。


 解って良かったのかどうなのか。


 ほんとにこのツール使って良いのか悩みますね><;





2011年1月5日水曜日

Railsでエクセルファイルを出力する



環境:rails2.3.8、spreadsheet0.6.5.0


今回は、Ruby用のspreadsheetというのを使って、エクセルを出力したいと思います。


イメージとしては、エクセルのテンプレートファイルを作っておき、


出力ボタン押下時に、そのテンプレートを読込み、値を設定し、そのまま「ファイルを開く」ダイアログを出す感じで。





まずは、


gem install spreadsheet


現在のバージョンは0.6.5.0でした。


次に出力機能を付けるcontrollerに以下のソースを記述する。



def print
require 'spreadsheet'

#テンプレートファイルの取得
book = Spreadsheet.open("テンプレート.xls")

#最初のワークシートを設定
sheet1 = book.worksheet(0)

#ここで値をゴリゴリ設定する
sheet1[8,5] = "125"
sheet1[9,5] = "9"

#ダウンロードする為にtempファイルを作成
tmpfile = Tempfile.new ["テスト", ".xls"]
book.write tmpfile

tmpfile.open # reopen

send_data(
tmpfile.read,
)

tmpfile.close(true)

end


あとは、view側で上記のprintアクションを呼ぶようにするだけ。





railsで、oracleXEに接続してみた(windows環境)



環境:InstantRails、rails2.3.8、oracleXE


railsからoracleの接続。簡単そうでちょっと手こずりました。


まだ、DBアクセスは試していませんが、とりあえず、接続の方法を先にアップします。


RubyForge から"ruby-oci8-2.0.4-x86-mingw32.gem"をダウンロード


>cd xxx


 で、ダウンロードしたフォルダに移動


>gem install ruby-oci8-2.0.4-x86-mingw32.gem 


 でoci8のインストール


>gem install activerecord-oracle_enhanced-adapter


で、activerecordの接続用アダプタをインストール(1.3.1)


detabase.ymlを編集(とりあえず開発環境だけ)



development:
adapter: oracle_enhanced
database: XE
username: system
password: ******


あ、oracleXEは既にインストールされている前提で書いています。