0

Rails のアップロード機能を掘り下げて、実際にこのrailsguide に従ってください。

アップロード フォームに次のコードを使用します。

<%= form_tag({ action: :upload }, multipart: true) do %>
    <%= file_field_tag :picture %>
    <%= submit_tag %>
<% end %>

そして、これは私のアップロード方法です:

def upload
    uploaded_io = params[:customer][:picture]     #erroneous line!!
    File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
      file.write(uploaded_io.read)
    end
    flash[:notice] = "File uploaded successfully!"
    redirect_to root_path
end

2 番目のコード スニペットで間違っていると思われる行をマークしました。アップロード方法は railsguide から貼り付けただけで、params 配列を [:customer] に調整しました。

ファイルをアップロードすると、次のエラーが発生します。

undefined method `[]' for nil:NilClass

これは、上でマークした行を指します。

この他の質問も見つけましたが、それがどのように役立つかまだわかりません。

私は何を間違っていますか?フォームが間違っているか、コントローラーのメソッドが間違っていますか? どんな助けでも感謝します。

4

1 に答える 1

2

に変更してみてください

params[:picture]

ログをいつでも見て、リクエスト パラメータのハッシュがどのように構成されているかを確認できます。Rails で form_for を使用する場合、以下のように customer オブジェクトで考えてみましょう。次に、フィールドを次のように取得します

[:customer][:field_name] 

しかし、form_tag ヘルパーを使用したばかりなので、別のハッシュに含まれていません。

<%= form_for @customer do |f| %>
 <%= f.text_field :field_name %>
<% end %>
于 2012-10-27T22:37:18.603 に答える