Tutorial PaperClip === Receita de Bolo
|
|
Olá pessoal, mais uma vez venho escrever um tutorial sobre upload de imagens, desta vez sobre o tão badalado paperClip, apesar de ainda preferir o attachament_fu porque o nome paperclip me lembrar aquele bonequinho chato da ajuda do $$microsoft$$Office, mas vamos la, pode ser que eu me encante com o paperclip e passe a usar ele. No meu tutorial vou usar o ubuntu 8.10 com o Rails 2.1.0(Acreditem era o mais recente instalado na minha maquina)e o banco de dados mysql. A Já ouvi dizer que o paperClip da um pequeno problema no Ruindows, não vou poder ajudar neste aspecto porque só tenho o linux instalado na minha maquina, mas fica o espaço para quem quiser complementar algo. Agora vamos começar a receita de bolo =) Primeiro vamos criar o nosso projeto, entre no console e digite: Agora com o projeto criado vamos entrar no diretório do mesmo: cd cadastro Já dentro do projeto vamos instalar o nosso plugin paperClip, eu sempre uso gems mas não sei se o paperClip já é uma gem, então vamos fazer da maneira antiga: Antes de prosseguir vou configurar meu arquivo config/database.yml, vou fazer isto agora antes que esqueça de fazer no futuro: Agora só basta colocar no database de development a senha que o restante já está configurado: Não vai adiantar nada eu ter um projeto criado, um plugin instalado, um banco de dados configurado se não tenho o meu banco de dados, então vamos criar o nosso cadastro_development, após sair do vim com :wq e de volta console digite: mysqladmin -u root -p create cadastro_development Agora sim posso dizer que estamos com todos ingredientes na mesa, vamos agora bater o bolo. O que eu fiz ali foi apenas criar um CRUD chamado pessoa que vai gerar uma tabela chamada pessoas, na tabela vamos ter um campo nome que vai ser um varchar, um campo idade que vai ser um integer, pode-se observar também que criamos três campos diferentes, esses campos são: imagem_file_name => Acredito ser onde o caminho do arquivo ou nome do mesmo ai ficar armazenado imagem_content_type => Acredito ser o tipo do arquivo, a extensão dele. imagem_file_size => Acredito ser o tamanho do arquivo Se eu estiver errado por favor vocês podem me corrigir, é a primeira vez que estou testando o paperClip então não tenho muito conhecimento sobre ele =). Sim, agora vamos para o nosso model(preparar a forma do bolo =) ) vim app/models/pessoa.rbVamos deixar o arquivo semelhante ao descrito abaixo: No caso setamos qual o nome do campo que vai conter o arquivo anexado(imagem no caso) e colocarmos algumas propriedades nele, mas a frente vamos ver para que servem estas propriedades. Agora salve o arquivo e saia do vim: :wq Agora vamos ligar o forno para colocar o nosso bolo, vamos preparar nossa view, vamos no arquivo app/views/pessoas/new.html.erb que é o arquivo que cria um novo registro, o C do CRUD =) vim app/views/pessoas/new.html.erb Neste arquivo de cara vamos ver um grande problema, observe o conteúdo do arquivo: Você pode observar que ele criou também os campos imagem_file_name, imagem_content_type e imagem_file_size, vamos apagar tudo relacionado a eles na nossa view e deixar nosso arquivo semelhante ao que vem abaixo: Apenas troquei alguns campos por f.file_field :imagem, peço que prestem muita atenção la no começo do form, primeira vez que fiz um upload de arquivos no rails apanhei bastante(uma noite inteira acreditem) pois não sabia que tinha que colocar :html => { :multipart => true } la na parte de cima, isto é necessário não só para upload de imagens como também upload de qualquer natureza =). Vamos salvar e sair do arquivo novamente: :wq Teoricamente nosso upload de imagens já funciona mas pensando bem para que eu vou fazer um upload de imagens se eu não vou mostrar em lugar algum? Pensando nisso vamos alterar nosso arquivo app/views/pessoas/show.html.erb para receber já a nossa imagem salva. Vamos fazer algo semelhante com o que fizemos com o new, veja como vai ficar o codigo: Vamos novamente salvar e sair: :wq Depois disto tudo vamos fazer umas validações, então vamos abrir novamente app/models/pessoa.rb e deixar semelhante ao código abaixo: Pronto já conseguimos fazer praticamente tudo, um :wq para sair do vim, antes de testar vamos criar o banco de dados: rake db:mgirate Agora tudo funcionando vamos comer nosso bolo =) vamos rodar o nosso servidor: script/server Com o servidor rodando vamos ao navegador e digitar a seguinte url: localhost:3000/pessoas Com isto vamos ver la nosso lindo bolo(CRUD), clique no botão new pessoa e vamos nos preparar para upar nossa imagem jpg =) Ops, um erro ao salvar? O que aconteceu? intriga da oposição? nosso bolo solou? Vamos primeiro parar o nosso servidor, volte ao console e aperte Ctrl + c, vamos agora procurar nosso erro, alias meu erro =). Acho que esquecemos a cobertura =(. Pessoal na verdade eu estava escrevendo este tutorial enquanto aprendia a usar o peperclip, pude notar que la quando estávamos criando nosso scaffold deveríamos ter colocado um outro campo chamado imagem_updated_at, para não voltar tudo ao começo podemos ou adicionar um novo migrate e colocar este campo ou voltar uma versão no banco e colocar nosso campo que falta, eu vou ficar com a segunda opção pois ainda não temos nada populado em nosso banco de dados: rake db:migrate VERSION=0 Agora vamos abrir o nosso arquivo migrate, acho que em cada um fica diferente o caminho dependendo do dia e hora que foi gerado o scaffold, mas no meu caso tenho que ir em: vim db/migrate/20081119230940_create_pessoas.rb Ao abrir o arquivo vamos alterar de modo que fique semelhante a este: Vejam no no método self.up(responsável por criar os arquivos ao subir um migrate) adicinei um campo tipo datetime chamado :imagem_updated_at :wq Vamos agora criar novamente nossas tabelas no banco dedados: rake db:migrate Depois de toda essa confusão vamos novamente iniciar nosso servidor: script/server Agora vamos novamente la no nosso navegador. Vamos começar a comer nosso bolo, agora com cobertura e tudo =). Assim que você salvar la no CRUD vai ser direcionado para a pagina show, observe que já aparece a imagem nos tamanhos pequeno, médio e grande, lembram quando eu falei em umas tais propriedades la no nosso model, tai auto explicado para que elas servem. Pessoal achei muito bacana o paperClip, muito fácil e objetivo, faz jus a filosofia do RubyOnRails, aqui em casa eu fiz da mesma forma como descrito acima e funfou bonitinho. Caso vocês vejam o tutorial, gostem e queiram postar em seus respectivos sites, blogs etc… e tal, fiquem a vontade para isto, peço apenas que lembrem de mim e me mandem um agradecimento no blog(Quero ficar famoso e dar autógrafos =)).Bem vou procurar algum outro assunto para o próximo tutorial, espero que tenham gostado deste e dos outros que venho escrevendo. Boa sorte a todos e um bom desenvolvimento. |
|
|
como sempre vou reclamar de algumas tags p que sempre me perseguem, ignorem algumas delas que ficam em locais impróprios elas por favor =) |
|
|
Pra não ficar com essas tags, sempre de um enter entre a ultima linha de texto que vc escreveu e a tag de código. Exemplo: meu texto … Resumindo, é só deixar uma linha em branco entre o seu texto e as tags de código. |
|
|
Cara valeu a dica, ficou bom agora =) |
|
|
Rafael, estou utilizando o Paperclip e nunca utilizei a coluna x_updated_at. Dê uma olhada no tutorial do Jim Neath Eduardo Mucelli. |
|
|
Essa coluna veio no paperclip mais novo… quase tive um troco qdo apareceu uns 100 F no meu autospec … hueahue Eh soh adicionar ela… |
|
|
pois é, na documentação do paper clip não tem, mas no repositorio do git tem explicando como faz. De qualquer forma funfou legal =) |


