Existem muitos plugins ótimos para fazer upload de arquivos em Rails, entretanto, é possível fazer isso de uma forma bastante simples, passo a passo.
1- Criar um projeto Rails
>> rails photos
>> cd photos
2- Criar uma pasta dentro de Public (ou qualquer outro lugar) onde ficará armazenada a foto
>> mkdir public/photos
3- Gerar o modelo Photo
>> script/generate model photo
4- Editar o modelo (photo.rb) com o conteudo abaixo:
É necessário que a pasta “public/photos” exista.
def self.save(upload)
name = upload['datafile'].original_filename
directory = "public/photos"
# create the file path
path = File.join(directory, name)
# write the file
File.open(path, "wb") { |f| f.write(upload['datafile'].read) }
end
5- Gerar o controller de photos
>> script/generate controller Photo
6- Editar o controller (photos_controller.rb) com o conteudo abaixo
def index
render :file => 'app\views\upload\uploadfile.rhtml'
end
def create
post = Photo.save(params[:upload])
render :text => "Arquivo enviado com sucesso"
end
7- Criar a view (uploadfile.rhtml)
<h1>File Upload</h1>
<% form_for(:html => { :multipart => true }, :action => :create) do |f| %>
<p><%= file_field 'upload', 'datafile' %></p>
<p><%= f.submit "Create" %></p>
<% end %>
8- Abrir o navegador, fazer o upload e verificar a pasta public/photos
Cara, tem algumas linhas erradas aí no código, como por exemplo:
“>> script/generate model music”
Quando na verdade deveria ser photo no lugar de music, não?
Entre outros detalhes pequenos de concordância de sintaxe da linguagem.
Quando você diz “editar o controller” você quer dizer o application_controller.rb ou o photos_controller.rb
Para quem saca mais é fácil notar a confusão, mas para os mais leigos, com certeza o código não vai servir de ajuda.
Eu mesmo tô começando no ruby agora e acho que esse post parece muito útil, mas não está tão bem escrito e comentado como poderia!
Olá Pedro! Muito obrigado por seu feedback!
Vou atualizar o post o mais rápido possível para que fique mais explicativo