form_forとform_tag

ファイルのアップロード方法を勉強する上でわかったこと。
HTMLで入力したものをサーバに送るのはformフィールドで記述する。
Railsではそれを簡単に記述するために「ヘルパー」を用意している。
formフィールド用のヘルパーの代表的なものにはform_forとform_tagがある。
form_forはモデルに存在する項目を入力する場合、簡単に書くことができる。
form_tagはモデルに存在しない項目を入力する場合に使用する。
scaffoldで生成されたビューはform_forを使用する。
書き方が全然違うのでもうちょっと勉強しないといけないなあ。

NetBeans翻訳プロジェクトのTシャツ

NetBeans翻訳プロジェクトのMasaki KatakaiさんからTシャツを頂きました。
こんな感じです。
http://blogs.sun.com/katakai/entry/netbeans_translatedfiles_t_shirt
背中にあるのは「僕らは翻訳する」っていうのがいろんな国の言葉に
翻訳されているんですけど、どこの国だかさっぱり…ん?英語は無いんですね。
(やはり英語がベースになっているからか…。)
さて、ファイルのアップロードですが、これがまた大変です。
何しろHTML全く知らずにRuby on Railsに挑戦しているので、
何が標準でどうしたら良いのか分からずじまい。
こんな人っているんでしょうか。

ファイルのアップロード

NetBeans6.5をセットアップしRoRでログイン機能を試し、日本語ローカライズも試した。
次に試すのはファイルのアップロードだ。WEBに関して全く素人でもできるんだろうか。
まずは"Ruby"や"ファイルアップロード"などのキーワードで検索。どんな技術が使われているんだろう。
"multipart/form-data形式","サーバへのファイルの保存方法","StringIO","attachment_fu"
"acts_as_attachment","file_column"…などなど。
と、とりあえずはサンプルがわかりやすいものから調べていくか…。

ようやくRuby-GetText-Packageが動きました

GNU msgmergeのエラー…というよりgettextのエラーのようだ。
poファイルがUTF8になっていなかったのが原因。
UTF8にするとちゃんと変換されました。
でも、なんでrmsgmergeは動かなかったんだろう。
ためしにmsgmergeをIRBで確認。

>> cmd = ENV["MSGMERGE_PATH"] || "msgmerge"
=> "msgmerge"
>> `#{cmd} --version`
=> "msgmerge (GNU gettext-tools) 0.13.1\r\nCopyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.\r\nThis is free software; see the source for copying conditions.  There is NO\r\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\nWritten by Peter Miller.\r\n"
>> p $?.success?
true
=> nil
>> p $?
#<Process::Status: pid=????,exited(0)>
=> nil

おや?rmsgmergeと違って、p $?.success?はtrueになるし、p $?の結果も違う。
表示までの時間も違う(rmsgmergeはすごく遅い)。
rmsgmergeのファイルを検索してみると、バッチファイルがあった。
この中からjrubyを立ち上げて、rmsgmergeを起動しているんだな。
詳しくはわからないけど、$?に返される値が異なることで動作しなかったんだ。
まあいい、ようやくRuby-GetText-Packageが動いたぞ!

Ruby-GetText-PackageのためにGTK+forWin(Development Environment)をインストール

rmsgmergeがうまく動作しないので、作者のサイトに書いてあった方法を試した。
参考:http://www.yotabanana.com/lab/20060910.html
GTK+forWin(Development Environment)は以下のサイトからダウンロード。
Glade/Gtk+ for Windows - Browse /gtk+-win32-devel at SourceForge.net
動いたけれど…今度は違うエラーが出たぞ。
…時間切れだ。

またまたRuby-GetText-Package動きません

ActiveRecordの日本語化ができたので、いろんな所を日本語化してみる。
項目名とか。なるほど”モデル|項目名”のように表現されるんだ。あれ?
passwordの入力項目は変わっていない。そっかビューを変更するんだな。
えーっと、POTファイルを追加したら…マージの機能があるのか。
Rakefileに以下の行を追加

desc "Update pot/po files."
task :updatepo do
  require 'gettext/utils'
  GetText.update_pofiles("Test",Dir.glob("{app,config,components,lib}/**/*.{rb,erb,rjs}"), "Test 1.0.0")
end

実行すると…エラーがでた…また?

rake aborted!
`msgmerge' may not be found. 
Install GNU Gettext then set PATH or MSGMERGE_PATH correctly.

GNU Gettextって何?…(サイトを検索)…なるほどどうやらmsgmergeは
GNUのプログラムなんだ…(さらにサイトを検索)…ん?何やらrmsgmergeが使えそう。
参考:August 2006 - Hello, world! - s21g
早速、NetBeansのrakeのオプションにMSGMERGE_PATH=rmsgmergeを入れて実行。
…あれ?`msgmerge' may not be found. のmsgmergeがrmsgmergeになっただけ。
エラーになった行を見てみた。utils.rbの中身か。

`#{cmd} --version`
unless $?.success?
  raise _("`#{cmd}' may not be found. \nInstall GNU Gettext then set PATH or MSGMERGE_PATH correctly.")
end

cmdがrmsgmergeになってんのか。IRBで確認。

>> cmd="rmsgmerge"
=> "rmsgmerge"
>> `#{cmd} --version`
=> "F:\\NetBeans 6.5\\NetBeans Dev 200808260201\\ruby2\\jruby-1.1.3\\bin\\rmsgmerge 1.92.0 (2007/07/21)\nF:/NetBeans 6.5/NetBeans Dev 200808260201/ruby2/jruby-1.1.3/bin/jruby.bat 1.8.6 (2008-08-26) [java]\n"
>> puts $?.success?
false
=> nil

うまく動いているようなんだけど。なぜか$?.success?がfalseになってるようだ。なぜ?

Ruby-GetText-Package動きました

ようやく動いたRuby-GetText-Package。結局、何が間違っていたのかというと、
config/environment.rbにrequire 'gettext/rails' を追加する場所が間違っていたんだ。
Rails::Initializer.run do |config|からendの間に追加していたのが間違い。
こんな感じで表示。

userに7つのエラーが発生しました。
次の項目を確認してください。

Loginを入力してください。
Loginは3文字以上で入力してください。
Emailを入力してください。
Emailは3文字以上で入力してください。
Passwordを入力してください。
Passwordは4文字以上で入力してください。
Password confirmationを入力してください。