1

非常に単純なデータ入力フォームに、ユーザーがファイルをサーバーのファイル システムにアップロードして、そのファイルへの URL をデータベースのフィールドに配置できるようにするボタンを追加しようとしています。

ここまでで、_form...erb ファイルに file_field ヘルパーを追加できることがわかりました。

<%= form_for(@business) do |f| %>
<% if @business.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@business.errors.count, "error") %> prohibited this business from being saved:</h2>

<ul>
<% @business.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="field">
<%= f.label :deletedFlag %><br />
<%= f.check_box :deletedFlag %>
</div>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>

...

<div class="field">
<%= f.label :logoURL %><br />
<%= f.text_field :logoURL %>

    <%= f.file_field :imagefile %>
</div>

<div class="field">
<%= f.label :streetAddress %><br />
<%= f.text_area :streetAddress %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>

これにより、「ファイルを選択」ボタンのあるフォームが表示されます。それをクリックすると、ファイルを選択できます。偉大な。

今、ルビーガイドから: http://guides.rubyonrails.org/form_helpers.html#uploading-files次のようなものを追加するように言われました:

def upload
  uploaded_io = params[:business][:imagefile]
  File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
    file.write(uploaded_io.read)
  end
end

私のコントローラーに。

私が解決していないのは、その file_field がその「アップロード」アクションにどのように接続されるかです。ボタンを押してファイル名などを受け入れることはログで確認できますが、ファイルのアップロードが開始または試行されたことを示す兆候はありません。

私は多くの参考文献を読みましたが、それらはすべて、これら2つのものが必要であると言っているようですが、(私にとって)それらは点を結び付けていません. はい、私はRuby/Railsに非常に慣れていないので、明らかに基本的なものが欠けています。

4

2 に答える 2

1

おそらく、Rails がフォームからコントローラーにリクエストを渡すことができるようにルートを設定し、そのルートを使用するようにフォームを設定する必要があります。

# config/routes.rb
post '/upload' => 'mycontroller#upload'

# app/views/some_model/new.html.erb
<%= form_for something, url: upload_path do |f| %>
...

ただし、これはおそらく、Rails でファイルのアップロードを処理する方法として、特に新規ユーザーには最も推奨されない方法です。代わりにCarrierwavePaperclip、またはDragonflyを設定する方がはるかに良いでしょう。

于 2013-05-31T03:58:37.717 に答える