2012-10-21 15 views
8

Natknąłem się na problem z przesyłaniem plików w Railsach. Znalazłem pomocnika file_field :file, który może być używany z form_for(@some_model). Jednak nie mogę znaleźć żadnego zastosowania w tym przypadku, ponieważ te znaczniki są używane do tworzenia/edycji niektórych modeli, poprzez przypisywanie mas. Nie ma, AFAIK, nie ma możliwości traktowania fileupload jako typowego pola (zobacz File upload won't work in Ruby on Rails 3 using Multipart Form). W takim przypadku wymagana jest ręczna obsługa przesłanego pliku. Dlaczego więc ktoś chciałby umieścić plikuploadload jako część edycji modelu?Ruby On Rails: przykład file_field na formularzu dla

photo.rb

class Photo < ActiveRecord::Base 
     attr_accessible :name, :filename, 
    end 

photo_form.html.erb

<%= form_for(@photo, :multipart => true) do |f| %> 

    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.file_field :file %> 

    <%= f.submit %> 

<% end %> 

photos_controller.rb powyżej

def create 
    @photo = Photo.new(params[:photo]) 

linia nie powiedzie się, ponieważ tam nie ma: atrybut pliku. To musi być obsługiwane przed i ręcznie usunięte z :params. Po raz kolejny - czy istnieje jakieś rzeczywiste użycie takich tagów?

+0

Hej, jeśli masz Mam pomysł na to, jak przesłać plik za pomocą form_for, mając inne pola i etykiety, proszę udostępnić go tutaj. Nawet próbuję to zrobić. – learner

+0

I byłoby miło, gdyby nie było potrzeby używania żadnego klejnotu. – learner

+0

Co się stanie, jeśli spróbujesz 'attr_accesible: name,: file' oraz w twoim widoku' <% = f.file_field: filename%> '? – mmichael

Odpowiedz

3

Pamiętam, że kiedyś to załadować plik xml w Rails

widok:

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

kontroler:

def upload 
    file_data = params[:xml_file] 
end 

Jest użyciu form_tag ale to nie będzie trudno dodaj również inne informacje do tego formularza.

3

będę będzie przykładem jak używam go Myślę, że to wyjaśnia sama wystarczająco dobry, mam nadzieję, że to pomoże

<%= form_for @item do |f|%> 
    <%= f.file_field :photo, accept: 'image/png,image/jpeg'%> 
<% end %> 

Daj mi znać, jeśli masz jakiekolwiek wątpliwości