3

ソースに関する情報を格納するテーブルがあります。各ソースには、ソースと呼ばれるフォルダー内のイメージ アセット フォルダー内に画像があります。すべてのソース ファイルは同じ名前です。例えばassets/images/sauces/sauces_piri.png

私がやりたいことは、基本的に、作成が行われるフォームで .png ファイルをアップロードすることです。pic_url のフィールド内に、画像の名前がソースと一緒に保存されるので、表示したいときに正しく送信されます。画像。

現在、管理者はドメイン ファイル管理を使用して画像を正しい位置に物理的にアップロードする必要があります。また、新しいソースを作成するときに「sauces/sauces_name.png」を入力する必要があります。

新しいソースを追加するためのフォーム:

<%= error_messages_for(@sauce) %>
   <table summary="Sauces Form Fields">
    <tr>
     <th><%= f.label(:name,"Sauce Name") %></th>
     <td><%= f.text_field(:name) %></td>
    </tr>
    <tr>
     <th><%= f.label(:description, "Description") %></th>
     <td><%= f.text_area(:description, :size => '40x5') %></td>
    </tr>
    <tr>
     <th><%= f.label(:heat_level, "Heat Level") %></th>
     <td><%= f.select(:heat_level,{ 1 => "1", 2 => "2", 3 => "3", 4 => "4", 5 => "5"}) %></td>
   </tr>
   <tr>
    <th><%= f.label(:pic_url, "Picture URL") %></th>
    <td><%= f.text_field(:pic_url) %></td>
   </tr>
   <tr>
    <th><%= f.label(:title_colour, "Title Colour") %></th>
    <td><%= f.text_field(:title_colour) %></td>
   </tr>
   <tr>
    <th><%= f.label(:description_colour, "Desc Colour") %></th>
    <td><%= f.text_field(:description_colour) %></td>
   </tr>
  </table>

ペーパークリップなどのプラグインを使用せずに、ファイルが正しい場所に保存される画像のアップロードを有効にするにはどうすればよいですか?また、テーブル フィールドpic_urlに foldername/filename.png が保存されますか?

4

1 に答える 1

2

あなたが何に問題を抱えているのか、私にははっきりしません。そこで、ファイルのアップロードに関するサンプルフォームを投稿します。

<%= form_for(:uploaded_data_file, :url => upload_files_path(:params => params) ,  :remote => true, :html => { :multipart => true } ) do |f| %>
  <%= f.label "Upload" %><br />
  <%= f.file_field :location %>
<% end %>

この例で画像を保存する関数のパスを定義する必要があります。これは呼び出されupload_files_path、すべてのparams. 次に、webapp を再起動して新しいルートを取得します。

コントローラーでは、ファイルとその詳細を保存できます

ファイル名を取得するには

params[:uploaded_data_file][:location].original_filename

ファイル自体を取得して保存するには

File.open("where/to/save", "wb") { |f| f.write(params[:uploaded_data_file][:location].read) }

.png であることを確認するには、いくつかの正規表現チェックを実行できます。

if(name =~ /.png$/i) # for more than one type do (name =~ /.jpeg$|.png$/i)

何か他のことをするには、あなたparamsを見て、必要な変更を加えてください。

機能するルートについては、http://edgeguides.rubyonrails.org/routing.html#adding-more-restful-actionsを参照してください。

resources :posts do
  collection do
    get :upload_files # will create upload_files_posts_path
  end
end

または

match '/upload_files', :to => 'controller_name#method_name' # 'posts#upload_files'

または

<% form_tag({:action => 'upload_file'}  #will use the correct controller based on the form
于 2012-11-16T18:40:00.197 に答える