81

Railsは初めてで、CRUD手法を使用してRESTfulWebサイトを作成しています。これまでに3つのページを作成しました。これらのページはすべて、ユーザーがデータベースから行を作成、編集、および削除できるようにします。ただし、4ページ目にはファイルのアップロードフォームを含める必要がありますが、a)ファイルシステムがRailsでどのように機能するかわからないため、ファイルを保存する場所がわかりません。ファイルは約100kbで、常にダウンロードされるため、一時ストレージに保存できませんでした。そしてb)ファイルへの書き込み方法がわかりません。

上記の方法を教えていただければ幸いです。入力フォームにアップロード入力を作成してから、別のディレクトリのファイルパスにファイルを書き込みます。

4

5 に答える 5

142

2018年の更新

以下に書かれていることはすべて当てはまりますが、Rails 5.2にはactive_storage、S3(または他のクラウドストレージサービス)への直接アップロード、画像変換などを可能にするが含まれています。Railsガイドを確認して、ニーズに合ったものを自分で決定する必要があります。


ファイルのアップロードを非常にうまく解決するgemはたくさんありますが(リストについてはhttps://www.ruby-toolbox.com/categories/rails_file_uploadsを参照)、railsには独自のソリューションを簡単に展開できるヘルパーが組み込まれています。

フォームで-formヘルパーを使用するfile_fieldと、railsがアップロードを処理します。

<%= form_for @person do |f| %>
  <%= f.file_field :picture %>
<% end %>

次のように、コントローラでアップロードされたファイルにアクセスできます。

uploaded_io = params[:person][:picture]
File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
  file.write(uploaded_io.read)
end

達成したいことの複雑さにもよりますが、ファイルのアップロード/ダウンロードを簡単に行うにはこれで十分です。この例は、Railsガイドから抜粋したものです。詳細については、http://guides.rubyonrails.org/form_helpers.html#uploading-filesにアクセスしてください。

于 2013-01-05T17:13:47.800 に答える
3

特にファイルをアップロードするための優れた gem があります: carrierwaveです。wiki が役に立たない場合は、RailsCastの最適な使用方法について説明しています。file要約すると、Rails フォームには、ファイル アップロード ダイアログを呼び出すフィールド タイプがあります。あなたはそれを使うことができますが、「魔法」はcarrierwave宝石によって行われます。

「ファイルへの書き込み方法」とはどういう意味かわかりませんが、これが良いスタートになることを願っています。

于 2013-01-05T17:08:10.000 に答える