<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>dev &gt;&gt; Ruby</title><link>http://blogs.wankuma.com/pinzolo/category/1619.aspx</link><description>dev &gt;&gt; Ruby</description><managingEditor>THREE-ONE</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>THREE-ONE</dc:creator><title>vista で tail</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/29/157769.aspx</link><pubDate>Mon, 29 Sep 2008 23:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/29/157769.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/157769.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/29/157769.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/157769.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/157769.aspx</trackback:ping><description>Windows で tail を実現するツールはいくつかあるみたいですけど、どれがいいんでしょうか？&lt;br /&gt;
なんか軒並みうまく動かないんですが。&lt;br /&gt;
ファイル更新に関するイベントの発生の仕方が変ったんだっけ？&lt;br /&gt;
リリース前の vista で既存アプリの検証したときは、そうだった気がする。&lt;br /&gt;
rails のログ出力の方が溜めてんのかな？&lt;br /&gt;
エディタでファイル開きっぱなしだと、普通に更新されている気もするんだけど。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/157769.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>エラーメッセージからフィールド名を取り除く</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/26/157512.aspx</link><pubDate>Fri, 26 Sep 2008 09:19:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/26/157512.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/157512.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/26/157512.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/157512.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/157512.aspx</trackback:ping><description>Rails はデフォルトでエラーメッセージを英語で出力する。&lt;br /&gt;
でも当然我々が作るシステムでは、日本語で表示されるのが求められる。&lt;br /&gt;
解決策の一つに gettext がある。&lt;br /&gt;
導入するだけで、エラーメッセージのうち項目名以外は日本語化される。&lt;br /&gt;
だが、本来 gettext は i18n のためのライブラリであり、エラーメッセージのためだけに導入するには大きすぎると思う。&lt;br /&gt;
view や model を更新するたび、po ファイルを作り、翻訳して、mo ファイルを作るなんてやってられない。&lt;br /&gt;
個人的にはエラーのサマリを表示するより、ASP.NET の validator のように項目の周囲にメッセージを表示してやる形式のほうが個人的には好きなので、そもそも項目名が必要ない。&lt;br /&gt;
項目名が必要なければ ActiveRecord::Errors.default_error_messages を上書きしてやるだけで事足りる。&lt;br /&gt;
というわけで、項目名を表示させないようにする。&lt;br /&gt;
各モデルの errors には ActiveRecord::Errors#add を介してエラーメッセージが蓄えられる。&lt;br /&gt;
add メソッドの宣言は def add(attribute, msg) となっており、attribute に項目名が、msg にエラーメッセージが渡される。&lt;br /&gt;
ここではじめは下記のようにしてみた。（active_record_extension.rb として initializers ディレクトリに配置）
&lt;textarea name="code" class="ruby"&gt;
module ActiveRecord
  class Errors
    alias :original_add :add
    def add(attribute, msg = "")
      original_add("", msg)
    end
  end
end
&lt;/textarea&gt;
が、ダメっ！！&lt;br /&gt;
エラーメッセージが表示されなくなってしまった。&lt;br /&gt;
それもそのはず、attribute をキーにしてフィールドごとのエラーメッセージをハッシュに格納しているからだ。&lt;br /&gt;
というか、attribute はそもそもシンボルだろうし、表示される項目名というよりモデルのフィールド名だし。&lt;br /&gt;
なので別の手段を考える。&lt;br /&gt;
add メソッドの msg には、例えば %{fn} is empty. のような文字列が渡されてくる。&lt;br /&gt;
この %{fn} が項目名に置換されるので、%{fn} を取り除いてやればいいのだ。&lt;br /&gt;
というわけで、下記のように修正する。
&lt;textarea name="code" class="ruby"&gt;
module ActiveRecord
  class Errors
    alias :original_add :add
    def add(attribute, msg = "")
      original_add(attribute, msg.sub(/%\{fn\}/, ""))
    end
  end
end
&lt;/textarea&gt;
これでバッチリ項目名は表示されなくなった。&lt;br /&gt;
あとは、environment.rb に下記を追加しておしまい。
&lt;textarea name="code" class="ruby"&gt;
ActiveRecord::Errors.default_error_messages[:inclusion]    = "選択肢にありません" 
ActiveRecord::Errors.default_error_messages[:exclusion]    = "予約されています" 
ActiveRecord::Errors.default_error_messages[:invalid]      = "不正な形式です" 
ActiveRecord::Errors.default_error_messages[:confirmation] = "確認内容が一致していません" 
ActiveRecord::Errors.default_error_messages[:accepted]     = "許可されていない値です" 
ActiveRecord::Errors.default_error_messages[:empty]        = "入力してください" 
ActiveRecord::Errors.default_error_messages[:blank]        = "入力してください" 
ActiveRecord::Errors.default_error_messages[:too_long]     = "文字数が長すぎます(最長%d文字)" 
ActiveRecord::Errors.default_error_messages[:too_short]    = "文字数が短すぎます(最短%d文字)" 
ActiveRecord::Errors.default_error_messages[:wrong_length] = "文字数が不正です(長さ%d文字)" 
ActiveRecord::Errors.default_error_messages[:taken]        = "既に使用されています" 
ActiveRecord::Errors.default_error_messages[:not_a_number] = "数値で入力してください"
&lt;/textarea&gt;
文字列置換という力技ではあるけれども、現状はこれで問題ないのでしばらく様子見。&lt;br /&gt;
&lt;br /&gt;
error_message_for のように、サマリ表示したい場合は、下記の記事が参考になると思います。&lt;br /&gt;
&lt;a href="http://d.hatena.ne.jp/hardcore100/20080214/1202985276"&gt;ActiveRecord::Errorsあたりのローカライズ [ハードコアシステム開発]&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://d.hatena.ne.jp/LukeSilvia/20080110/1199989797"&gt;validationのエラーメッセージ（error_messages_for）の日本語化 [Slow Dance]&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://wota.jp/ac/?date=20050802"&gt;優しいRailsの育て方 [ノk|*&amp;#8216;－&amp;#8216;)＜ノリマツ！愛だよ、愛！]&lt;/a&gt;&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/157512.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>vim で rails 開発するための環境設定メモ</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/25/157450.aspx</link><pubDate>Thu, 25 Sep 2008 09:31:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/25/157450.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/157450.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/25/157450.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/157450.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/157450.aspx</trackback:ping><description>（昨日のエントリに一部書いたけど）vim を rails の開発環境にしよう。&lt;BR&gt;&lt;BR&gt;
&lt;DIV class=title&gt;1. vim-ruby の導入&lt;/DIV&gt;
&lt;DIV class=content&gt;&lt;A href="http://www.kaoriya.net/" target=_blank&gt;KaoriYa&lt;/A&gt; さんで配布されているバイナリを使用すればよい。&lt;BR&gt;&lt;A href="http://blogs.wankuma.com/pinzolo/archive/2008/09/24/157421.aspx"&gt;ruby に path は通しとけよ&lt;/A&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV class=title&gt;2. autocomplpop.vim の導入&lt;/DIV&gt;
&lt;DIV class=content&gt;通常の自動補完は、入力モード時に C-x, C-o を入力しなければならない。&lt;BR&gt;それを、 "." や "::" を入力した時点で自動的に候補を表示してくれるのがこちら。&lt;BR&gt;&lt;A href="http://www.vim.org/scripts/script.php?script_id=1879" target=_blank&gt;autocomplpop.vim&lt;/A&gt; を取得して、runtime\plugin に配置。&lt;BR&gt;&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV class=title&gt;3. rails.vim の導入&lt;/DIV&gt;
&lt;DIV class=content&gt;ruby に関する補完はすでに vim-ruby で実現できているので、rails 開発で使用するキーワードについて補完できるようになる。&lt;BR&gt;また、関連する view や model のソースを自動的に開いたりしてくれる。（すごく便利）そして、script/generate やマイグレーションを vim から実行できるようにもなる。&lt;BR&gt;&lt;A href="http://www.vim.org/scripts/script.php?script_id=1567" target=_blank&gt;rails.vim&lt;/A&gt; を取得し（zipでくれる）、中身の autoload, doc, plugin の各ディレクトリのファイルを、runtime ディレクトリ内の対応するディレクトリに配置。&lt;BR&gt;&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV class=title&gt;4. refe.vim の導入&lt;/DIV&gt;
&lt;DIV class=content&gt;&lt;A href="http://i.loveruby.net/ja/prog/refe.html" target=_blank&gt;refe&lt;/A&gt; という gem がある。&lt;BR&gt;日本語の ruby のリファレンスを参照したいときは、これを使うと便利。&lt;BR&gt;そして、それを vim からインクリメンタルに参照できるようにしてくれるのがこれ。&lt;BR&gt;もちろん事前に refe のインストールが必要。gem install refe で ok。&lt;BR&gt;a : &lt;A href="http://rails2u.com/projects/refe.vim/" target=_blank&gt;refe.vim&lt;/A&gt; から refe.vba をダウンロードする。&lt;BR&gt;b : ダウンロードした refe.vba を vim で開く。&lt;BR&gt;c : おもむろに :source 'so %' とコマンド打てばインストール完了。&lt;BR&gt;サイトのマニュアルではコマンドラインでのインストール方法が記載されていたけど、windows だとできなかった。&lt;BR&gt;やり方が悪かっただけかもしれないけど、同じことで悩む人がいるかもしれないので別方法もメモ。&lt;BR&gt;&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV class=title&gt;5. project.vim の導入&lt;/DIV&gt;
&lt;DIV class=content&gt;vim 内に左ペイントしてプロジェクトツリーを表示してくれる。&lt;BR&gt;プロジェクトツリーからファイルを選択して、表示なんてことも可能。&lt;BR&gt;&lt;A href="http://www.vim.org/scripts/script.php?script_id=69" target=_blank&gt;project.tar.gz&lt;/A&gt; をダウンロードして、rails.vim と同様に runtime ディレクトリ以下の対応するディレクトリに配置。&lt;BR&gt;rails プロジェクトのソースを開いた状態で、:Rproject コマンドを打てば rails のプロジェクトツリーが表示される。&lt;BR&gt;・キーボードでプロジェクトペインにフォーカス移動するにはどうすればいいの？（今はマウスでクリックしてる）&lt;br /&gt;・/hoge とか :s/foo/bar/g の対象にプロジェクトペインの表示文字が含まれるんだけど、どうにかならない？&lt;br /&gt;など、便利だけどまだまだ使いこなせていない部分が多数。要学習。&lt;BR&gt;&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV class=title&gt;6. 困ったこと&lt;/DIV&gt;
&lt;DIV class=content&gt;うちの vim は ASCII だけの UTF-8 を CP932 で判断する。&lt;BR&gt;仕方ないっちゃぁ、仕方ないがこれじゃ使い物にならない。&lt;BR&gt;vimrc をあれこれいじっても、どうしても CP932 になる。&lt;BR&gt;rb, rjs, erb あたりは優先的に UTF-8 にしたい。&lt;BR&gt;とりあえず C:\Users\&amp;lt;USER&amp;gt;\vimfiles\plugin\ftfiles の ruby.vim と eruby.vim に下記を追加した。&lt;BR&gt;set fileencoding=utf8&lt;BR&gt;set encoding=utf8&lt;BR&gt;自分で作る場合はすべて UTF-8 だから、とりあえずこれでいい。&lt;BR&gt;自動判別ができなくて、他のエンコーディングの Ruby ソースをいじる機会があればその時考える。&lt;BR&gt;&lt;/DIV&gt;&lt;BR&gt;[参考サイト]&lt;BR&gt;&lt;A href="http://d.hatena.ne.jp/RKTM/20080422/p1" target=_blank&gt;WindowsでのRuby/Rails開発環境としてのVimの設定メモ。[RKTMの日記]&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blog.blueblack.net/item_133" target=_blank&gt;Vimを使ったRuby On Rails開発環境の構築 [ナレッジエース]&lt;/A&gt;&lt;BR&gt;環境構築までの手順として参考にさせていただきました。&lt;BR&gt;&lt;BR&gt;&lt;A href="http://fg-180.katamayu.net/archives/2006/09/02/125150" target=_blank&gt;rails.vimのいい加減な翻訳 [83's]&lt;/A&gt;&lt;BR&gt;&lt;A href="http://d.hatena.ne.jp/secondlife/20061222/1166781841" target=_blank&gt;rails.vim まとめ [川o・-・）＜2nd life]&lt;/A&gt;&lt;BR&gt;rails.vim で何ができるかってやつ。これからよく見ていくことになるだろう。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/157450.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>Windows の vim で omnifunc が設定されていません</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/24/157421.aspx</link><pubDate>Wed, 24 Sep 2008 21:52:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/24/157421.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/157421.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/24/157421.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/157421.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/157421.aspx</trackback:ping><description>NetBeans もいいけど、vim での rails 開発環境も整えておきたいなと。&lt;br /&gt;
Linux や Mac でも同じ環境でできるしね。&lt;br /&gt;
NetBeans でもできるけどねw&lt;br /&gt;
まあ、非力なマシンやターミナルから CUI でもできるということで・・・&lt;br /&gt;
で、vim-ruby は Kaoriya さんのバイナリなら始めから入っているとのことで、&lt;a href="http://vim.g.hatena.ne.jp/keyword/autocomplpop.vim" target="_blank"&gt;autocomplpop.vim&lt;/a&gt; を導入。&lt;br /&gt;
これで C-x, C-o がいらなくなるんだって、すんごいね。&lt;br /&gt;
と思ったら、全然自動保管できない。&lt;br /&gt;
omnifunc が設定されていません。というエラーが出る。&lt;br /&gt;
いろいろ調べて試してみるが、だめ。&lt;br /&gt;
んで、ハッと気づく。ヘッダ情報がないんじゃない？&lt;br /&gt;
ruby\bin を path に加えてリブートすると、ちゃんと自動補完されるようになった。&lt;br /&gt;
さて、色々と試してみますか。&lt;br /&gt;
どこまで使いこなせるかなー&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/157421.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>passenger をインストール</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/23/157344.aspx</link><pubDate>Tue, 23 Sep 2008 14:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/23/157344.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/157344.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/23/157344.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/157344.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/157344.aspx</trackback:ping><description>少し前までは、mongrel cluster ＋ mod_proxy_balancer とかが主流だった様だけど、最近は pasenger がよろしいみたい。&lt;br /&gt;
というわけで、インストール。&lt;br /&gt;
いか、作業メモ。といっても passenger が非常に親切なため、とっても簡単。&lt;br /&gt;
まるで、windows 並に親切なインストールを行ってくれます。&lt;br /&gt;
◆passenger のインストール&lt;br /&gt;
　・sudo gem install passenger を実行&lt;br /&gt;
　・fastthread が足りないと言われたのでインストール&lt;br /&gt;
　・mswin32 と ruby と i386-mswin32 が表示されたので ruby を選択&lt;br /&gt;
　・今度は rack が足りないと言われたのでインストール&lt;br /&gt;
　・fastthread, rack, passenger のインストールが無事終了&lt;br /&gt;
&lt;br /&gt;
◆Apache モジュールのビルドとインストール&lt;br /&gt;
　・sudo passenger-install-apache2-module を実行&lt;br /&gt;
　・ビルドとインストールには下記のソフトウェアが必要らしい&lt;br /&gt;
　　 * GNU C++ compiler&lt;br /&gt;
　　 * Ruby development headers&lt;br /&gt;
　　 * OpenSSL support for Ruby&lt;br /&gt;
　　 * RubyGems&lt;br /&gt;
　　 * Rake&lt;br /&gt;
　　 * Apache 2&lt;br /&gt;
　　 * Apache 2 development headers&lt;br /&gt;
　　 * Apache Portable Runtime (APR) development headers&lt;br /&gt;
　　 * fastthread&lt;br /&gt;
　　 * rack&lt;br /&gt;
　・Apache 2 development headers のみ not found となったためインストール&lt;br /&gt;
　　ちなみに、下記のメッセージが表示される。なんて親切な。&lt;br /&gt;
　　 * To install Apache 2 development headers:&lt;br /&gt;
　　   Please run yum install httpd-devel as root.&lt;br /&gt;
　・sudo yum install httpd-devel を実行→問題なく完了&lt;br /&gt;
　・再度 sudo passenger-install-apache2-module を実行→問題なく終了&lt;br /&gt;
　・インストール時に、httpd.conf に下記を追加しろというメッセージが表示されるので追加。&lt;br /&gt;
　　（また virtualhost の設定も簡単に出てくる。）&lt;br /&gt;
　　Please edit your Apache configuration file, and add these lines:&lt;br /&gt;
&lt;br /&gt;
　　   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so&lt;br /&gt;
　　   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3&lt;br /&gt;
　　   PassengerRuby /usr/bin/ruby&lt;br /&gt;
&lt;br /&gt;
　　After you restart Apache, you are ready to deploy any number of Ruby on Rails&lt;br /&gt;
　　applications on Apache, without any further Ruby on Rails-specific&lt;br /&gt;
　　configuration!&lt;br /&gt;
　・apache を再起動 sudo /etc/rc.d/init.d/httpd restart&lt;br /&gt;
&lt;br /&gt;
virtualhost の設定はまた後日。&lt;br /&gt;
ssl で動かすテストのため、設定にちょっとトラブルありそうな予感。
&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/157344.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>observe_field が生成するリクエストが使いづらい</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/22/157269.aspx</link><pubDate>Mon, 22 Sep 2008 11:19:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/22/157269.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/157269.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/22/157269.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/157269.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/157269.aspx</trackback:ping><description>&lt;pre&gt;
&amp;lt;%= text_field_tag :search_text %&amp;gt;
&amp;lt%= observe_field :search_text,
                  :frequency =&gt; 0.5, 
                  :update =&gt; :search_result, 
                  :url =&gt; { :action =&gt; :search } %&amp;gt;
&lt;/pre&gt;
Rails でよくある、インクリメンタル検索の手法なんだけど、このときに生成されるリクエストが使いづらい。&lt;br /&gt;
たとえば、テキストボックスに hoge と入力された場合 search?hoge&amp;authenticity_token=****** のようになる。&lt;br /&gt;
search?search_text=hoge&amp;authenticity_token=****のようになってほしいのだ。&lt;br /&gt;
authenticity_token がなかったころは、request.query_string でそのものが取得できるので、まだよかったんだろうけど、今だと毎回簡単な文字列解析が必要になる。&lt;br /&gt;
とりあえず &amp;amp; で分割して、authenticity_token= で始まらないやつを取得してる。&lt;br /&gt;
params.keys から id, action, controller, authenticity_token じゃないやつって取得してもいいけど、id, action, controller, authenticity_token が検索語にされたら。。。&lt;br /&gt;
authencticity_token はいいとして、id あたりが検索文字になることは大いにあり得るだろう。&lt;br /&gt;
ヘルパを解析して、編集するなりオーバーライドするのがまっとうなんだろうな。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/157269.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>Rubyが抱える課題</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/12/156251.aspx</link><pubDate>Fri, 12 Sep 2008 10:10:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/12/156251.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/156251.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/12/156251.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/156251.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/156251.aspx</trackback:ping><description>&lt;a href="http://www.atmarkit.co.jp/news/200809/11/ruby.html" target="_blank"&gt;Rubyが抱える課題、NaClの前田氏が講演 [@IT]&lt;/a&gt;&lt;br /&gt;
そんな話は聞いてはいたものの、JRuby が本家よりもかなり高速なのにびっくりした。&lt;br /&gt;
でも、Ruby やるならしっかりと本家を勉強しておきたいので、乗り換えはしない。&lt;br /&gt;
&lt;br /&gt;
しかし、結構問題が山積してますなぁ。&lt;br /&gt;
技術的にも体制的にも。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/156251.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>ログインで InvalidAuthenticityToken</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/06/155726.aspx</link><pubDate>Sat, 06 Sep 2008 12:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/06/155726.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/155726.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/06/155726.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/155726.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/155726.aspx</trackback:ping><description>ログイン時に、一端間違ったログインコード・パスワードで実行し、エラーの後に正しいコード・パスワードでログインしようとすると InvalidAuthenticityToken でエラーになる。&lt;br /&gt;
この InvalidAuthenticityToken ってのは CRSF 対策の物なんだけど、これでは使い物にならん。&lt;br /&gt;
原因は reset_session にあったようで、下記のコードが問題だった。&lt;br /&gt;
&lt;textarea name="code" class="ruby"&gt;
def login
  reset_session
  if request.post?
    user = User.authenticate(params[:code], params[:password])
    if user
      session[:user_id] = user.id
      redirect_to :action =&gt; "index"
    else
      flash[:error] = "ログインコード または パスワードが違います"
      @code = params[:code]
    end
  end
end
&lt;/textarea&gt;
ログイン実行時に毎回、reset_session していたため、キャッシュされているトークンと異なるからエラーだったらしい。&lt;br /&gt;
reset_session を認証成功時のみにすることで回避することができた。&lt;br /&gt;
&lt;textarea name="code" class="ruby"&gt;
def login
  if request.post?
    user = User.authenticate(params[:code], params[:password])
    if user
      reset_session
      session[:user_id] = user.id
      redirect_to :action =&gt; "index"
    else
      flash[:error] = "ログインコード または パスワードが違います"
      @code = params[:code]
    end
  end
end
&lt;/textarea&gt;
このエラーの詳細な解説は&lt;a href="http://www.dodgson.org/omo/t/?date=20080125" target="_blank"&gt;steps to phantasienさん&lt;/a&gt;で詳しく知った。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/155726.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>Ruby で数値を 0 埋めする</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/03/155371.aspx</link><pubDate>Wed, 03 Sep 2008 15:32:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/03/155371.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/155371.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/03/155371.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/155371.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/155371.aspx</trackback:ping><description>要するに C# での 5.ToString("0000") =&amp;gt; "0005" みたいなのをやるにはということ。&lt;br /&gt;
三種類ほど方法があるみたい。&lt;br /&gt;
&lt;textarea name="code" class="ruby"&gt;
sprintf("%04d", 5)
# =&gt; "0005"
format("%04d", 5)
# =&gt; "0005"
"%04d" % 5
# =&gt; "0005"
&lt;/textarea&gt;
うーん、しっくりくるのはやっぱり format かな。&lt;br /&gt;
sprintf は print とあるくせに、戻り値になるのがどうも違和感。&lt;br /&gt;
本家の C でも格納先は引数なんだよね？確か。&lt;br /&gt;
% 演算子は初めて知ったけど、なんかむずむずするな。&lt;br /&gt;
"%04d/%02d/%02d" % [year, month, day] みたいになると % が並んで見づらいような気がする。&lt;br /&gt;
それに % は剰余のイメージが強いので、よほどなれないととっさに読めないかも。&lt;br /&gt;
でも、キータイプは一番少ないので、慣れたら楽なのかも知れない。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/155371.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>カスタムフォームビルダを使用している場合の form_for における部分テンプレート</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/09/01/155040.aspx</link><pubDate>Mon, 01 Sep 2008 20:33:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/09/01/155040.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/155040.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/09/01/155040.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/155040.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/155040.aspx</trackback:ping><description>Rails 2.1 で、form_for 中の共通部分を部分テンプレートにできる。&lt;br /&gt;
&lt;pre&gt;
# create.html.erb
&amp;lt;% form_for(@obj) do |f| %&amp;gt;
  &amp;lt;%= f.label :name %&amp;gt;
  &amp;lt;%= f.text_field :name %&amp;gt;
  &amp;lt;br /&amp;gt;
  &amp;lt;%= f.submit &amp;quot;Submit&amp;quot; %&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/pre&gt;
こんなヤツの場合、_form.html.erb を作って分離することができる。&lt;br /&gt;
&lt;pre&gt;
# create.html.erb
&amp;lt;% form_for(@obj) do |f| %&amp;gt;
  &amp;lt;%= render :partial =&amp;gt; f %&amp;gt;
  &amp;lt;br /&amp;gt;
  &amp;lt;%= f.submit &amp;quot;Submit&amp;quot; %&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/pre&gt;
&lt;pre&gt;
# _form.html.erb
&amp;lt;%= form.label :name %&amp;gt;
&amp;lt;%= form.text_field :name %&amp;gt;
&lt;/pre&gt;
これはデフォルトのフォームビルダを使用している場合の話で、カスタムフォームビルダを使用している場合、少し話が変わる。&lt;br /&gt;
FormBuilder を継承した HogeFormBuilder を利用している場合はこんな風になる。&lt;br /&gt;
&lt;pre&gt;
# create.html.erb
&amp;lt;% hoge_form_for(@obj) do |f| %&amp;gt;
  &amp;lt;%= render :partial =&amp;gt; f %&amp;gt;
  &amp;lt;br /&amp;gt;
  &amp;lt;%= f.submit &amp;quot;Submit&amp;quot; %&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/pre&gt;
&lt;pre&gt;
# _hoge_form.html.erb
&amp;lt;%= hoge_form.label :name %&amp;gt;
&amp;lt;%= hoge_form.text_field :name %&amp;gt;
&lt;/pre&gt;
ポイントは二つ。&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;部分テンプレートのファイル名が _hoge_form.html.erb とクラス名を考慮したファイル名が要求される。&lt;/li&gt;
&lt;li&gt;部分テンプレートの中で使用される暗黙の変数が、hoge_form とこれまたクラス名を考慮したものになる。&lt;/li&gt;
&lt;/ul&gt;
一つ目は知っていたものの、二つ目で少しハマった。というわけでメモ&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/155040.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>