rails:1375
From: "Hiroyuki Tsutsumi" <h.tsutsumi@g...>
Date: Fri, 21 Jul 2006 13:12:39 +0900
Subject: [rails:1375] Re: original_filenameでつまずいています
堤です。 著者から返事がもらえるとは、感激です ^^ で、「:multipart => true」を確認したところ、特に問題はありませんでした。 下記に、そのコードをペーストします。 ・app/views/schedules/new.rhtml <%= start_form_tag :action => 'create', :multipart => true %> ・app/views/schedules/edit.rhtml <%= start_form_tag :action => 'update', :id => @schedule, :multipart => true %> そこで、development.log を調べてみました。 Processing SchedulesController#create (for 127.0.0.1 at 2006-07-21 13:06:54) [POST] Session ID: 4700bdafe56195bb452faee22e4228ef Parameters: {"schedule"=>{"datetime(4i)"=>"13", "datetime(5i)"=>"05", "title"=>"添付", "file_name"=>"PRE_nmnode.pdf", "content"=>"添付資料あり", "datetime(1i)"=>"2006", "datetime(2i)"=>"7", "datetime(3i)"=>"21"}, "commit"=>"作成", "multipart"=>"true", "action"=>"create", "controller"=>"schedules"} NoMethodError (undefined method `original_filename' for "abc.pdf":String): /app/controllers/schedules_controller.rb:98:in `set_file_name' /app/controllers/schedules_controller.rb:24:in `create' ログにも"multipart"=>"true"が記録されているので、問題はないかと思います。 私の環境はWinsowsなので、環境に問題があるのでしょうか? ちなみに、「original_filename」の定義は下記のファイルにありました。 C:\ruby\lib\ruby\gems\1.8\gems\actionpack- 1.12.3\lib\action_controller\cgi_ext\cgi_methods.rb #ひょっとして、PATHとか関係あるのかな〜 06/07/21 に Kazuhiko <kazuhiko@f...> さんは書きました: > > こんにちは、かずひこです。 > > At Fri, 21 Jul 2006 09:35:03 +0900, > Hiroyuki Tsutsumi wrote: > > > 「はじめようRuby on Rails」で学習しているのですが、 > > ありがとうございます。:) > > > P117のoriginal_filenameでつまずいています。 > > > > ブラウザからアクセスすると、「undefined method `original_filename'」と > > エラーになります。 > > エラー個所は下記のところです。 > > > > def set_file_name > > @file = params[:schedule][:file_name] > > params[:schedule][:file_name] = @file.original_filename > > end > > ファイルのアップロードのように multipart で POST すると、String ではなく > StringIO(を拡張したもの)でクエリーがやってきて、そのインスタンスには > original_filename というメソッドがあるはずです。 > > なので、app/views/schedules/new.rhtml や app/views/schedules/edit.rhtml > の中で、start_form_tagメソッドの第二引数に「:multipart => true」の指定が > 抜けているのではないかと想像します。 > > <%= start_form_tag(:action => 'create') %> > ↑こうなっていたら、 > <%= start_form_tag({:action => 'create'}, :multipart => true) %> > ↑こう書き換えてください。 > > # 例しに、「:multipart => true」を削除してみたら、同じ例外になりました。 > > > Rubyのリファレンスマニュアルをみると、 > > require "cgi" > > とあるのですが、これって何処に書き込めば良いでしょうか? > > require "cgi" をする必要はなく、ActionPack の中で定義されています。私の環 > 境では > > /usr/lib/ruby/gems/1.8/gems/actionpack-1.12.3 > /lib/action_controller/cgi_ext/cgi_methods.rb > > というファイルです。 > -- > かずひこ <http://wiki.fdiary.net/kazuhiko/> > 「恋とハックはアジャイルが命!」 > > -- > ML: rails@r... > 使い方: http://QuickML.com/ > -- ----- Hiroyuki Tsutsumi
@ 1373 2006-07-21 02:35 [h.tsutsumi@g... ] original_filenameでつまずいています 1374 2006-07-21 03:59 ┗[kazuhiko@f... ] -> @ 1375 2006-07-21 06:12 ┗[h.tsutsumi@g... ] 1376 2006-07-21 06:19 ┣[kazuhiko@f... ] 1377 2006-07-21 06:23 ┗[sakuro@e... ] @ 1379 2006-07-21 06:54 ┗[h.tsutsumi@g... ]