A enviar um ficheiro nos carris
seria ótimo se você pudesse me dizer como fazer o que mencionei acima - criar uma entrada de upload em um formulário de entrada, e então escrever o arquivo em um arquivo em um diretório separado.
3 answers
Use o Suporte file_field
-forma na sua forma, e os carris tratam do Carregamento para si:
<%= form_for @person do |f| %>
<%= f.file_field :picture %>
<% end %>
Terá acesso no controlador ao ficheiro carregado do seguinte modo:
uploaded_io = params[:person][:picture]
File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
file.write(uploaded_io.read)
end
Depende da complexidade do que queres fazer. alcançar, mas isso é totalmente suficiente para tarefas fáceis de upload/download de arquivos. Este exemplo é extraído dos guias de trilhos, você pode ir lá para mais informações: http://guides.rubyonrails.org/form_helpers.html#uploading-files
Há uma bela jóia especialmente para carregar ficheiros : carrierwave. Se o wiki não ajudar, há um Bom RailsCast sobre a melhor maneira de usá-lo . Resumindo, existe um tipo de campo file
nos formulários de Carris, que invoca a janela de envio de ficheiros. Você pode usá-lo , mas a 'magia' é feita por carrierwave
gem .
Sept 2018
Para qualquer pessoa que verifique esta questão recentemente, Rails 5.2+ tem agora a opção ActiveStorage por omissão e recomendo vivamente que a verifique.
Uma vez que faz parte do Core Rails 5.2+ agora, está muito bem integrado e tem excelentes capacidades fora da caixa (ainda todas as outras pedras conhecidas como Carrierwave, Shrine, paperclip,... são grandes, mas este oferece características muito boas que podemos considerar para qualquer novo projeto Rails)
Clip a equipa desactualizou a gema a favor da ActiveStorage dos carris.
Aqui está a página do github para a ActiveStorage e muitos recursos estão disponíveis em toda a parte
Também achei este vídeo muito útil para entender as características da Activestorage