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

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...     ]