2012-10-21 3 views
8

Ich stieß auf Datei-Upload-Problem in Rails. Ich fand file_field :file Helfer, der mit form_for(@some_model) verwendet werden kann. Ich kann jedoch keine Verwendung für diesen Fall finden, da diese Tags verwendet werden, um ein Modell durch Massenzuweisung zu erstellen/bearbeiten. Es gibt, AFAIK, keine Möglichkeit, Fileupload als typisches Feld zu behandeln (siehe File upload won't work in Ruby on Rails 3 using Multipart Form). In diesem Fall ist eine manuelle Operation für die hochgeladene Datei erforderlich. Also, warum sollte jemand sogar ein Dateiupload als Teil der Modellbearbeitung hinzufügen?Ruby On Rails: Beispiel für Datei_Feld auf Formular_für

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

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

Linie über fehlschlägt, weil Theres keine: Attributdatei. Es muss zuvor behandelt und manuell von :params entfernt werden. Noch einmal - gibt es eine echte Verwendung für solche Tags?

+0

Hey, wenn Sie habe eine Idee, wie Datei-Upload mit form_for erreicht werden kann, während andere Felder und Labels haben, bitte teilen Sie es hier. Auch ich versuche, das zu funktionieren. – learner

+0

Und es wäre nett, wenn es keinen Grund gibt, irgendeinen Edelstein zu benutzen. – learner

+0

Was passiert, wenn Sie 'attr_accesible: name,: file' und in Ihrer Ansicht' <% = f.file_field: filename%> 'versuchen? – mmichael

Antwort

3

Ich erinnere mich, dass ich das eine XML-Datei in Rails

Ansicht zum Hochladen verwendet:

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

Controller:

def upload 
    file_data = params[:xml_file] 
end 

Es ist mit form_tag aber es wäre nicht schwer sein, fügen Sie weitere Informationen in dieses Formular ein.

3

Ich werde sehen Sie ein Beispiel, wie ich es bin mit ich glaube, es erklärt sich gut genug, ich hoffe das

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

Lassen Sie mich hilft, wenn Sie irgendwelche Zweifel haben