Posts Tagged ‘paperclip’

Ruby on Rails Paperclip com I18n

Postado em 18 nov 2009
Categoria(s) I18n, Ruby on Rails

O plugin paperclip não tem suporte para i18n por padrão.

Então vamos implementar isso no braço, talvez não seja a forma mais elegante do mundo, mas funciona.

No seu model:

class Ong < ActiveRecord::Base
  # Paperclip
  has_attached_file :logo, :styles => { :thumb => "100x100>" }
  validates_attachment_size :logo, :less_than => 50.kilobytes, :message => I18n.t('activerecord.errors.messages.attachment_size', :min => 0, :max => 50.kilobytes)
end

Agora você precisar criar a diretiva activerecord.errors.messages.attachment_size no seu config/locales/pt-BR.yml:

pt-BR:
  # Active Record
  activerecord:
    errors:
      template:
        header:
          one: "Não foi possível gravar: 1 erro"
          other: "Não foi possível gravar: {{count}} erros."
        body: "Por favor, verifique o(s) seguinte(s) campo(s):"
      messages:
        attachment_size: "tamanho do arquivo deve estar entre {{min}} e {{max}} bytes"

Pronto! Seja feliz!
Se o plugin não faz, a gente faz.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby on Rails Paperclip como definir uma imagem padrão quando o usuário não fez upload da imagem

Postado em 23 jun 2009
Categoria(s) Ruby on Rails

Para definir uma imagem padrão de exibição, quando o usuário não fizer o upload de uma imagem, você deve usar a opção :default_url do Paperclip.

Por exemplo, digamos que você deseja exibir a imagem abaixo, quando o usuário não definiu uma foto no seu profile.

No Picture

Exemplo de configuração do Paperclip:

1
2
3
4
5
has_attached_file :picture,
                    :styles => {:thumb => '50x50#'},
                    :path => ":rails_root/public/images/pictures/:id/:style_:basename.:extension",
                    :url => "/images/pictures/:id/:style_:basename.:extension",
                    :default_url => "/images/no_pictures/:style/missing.png"

A linha abaixo, diz para o Paperclip procurar uma imagem padrão no diretório /images/no_pictures/:style/missing.png, onde :style é o tamanho do resize da imagem, nesse exemplo thumb:

...
:default_url => "/images/no_pictures/:style/missing.png"
...

Desta forma você precisa criar o diretório /images/no_pictures/thumb/ e colocar a imagem missing.png lá.

Quando você usar:

1
<%= image_tag(user.picture.url(:thumb), :alt => user.full_name) %>

Caso a imagem não exista o Paperclip usará a imagem padrão de exibição /images/no_pictures/thumb/missing.png

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby on Rails ActiveRecord como excluir registros dependentes e arquivos anexados com o Paperclip

Postado em 10 jun 2009
Categoria(s) Ruby on Rails

Digamos que você tenha uma mensagem, e essa mensagem possa ter várias fotos e vídeos relacionadas com ela.

Com o model message.rb da forma abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Message < ActiveRecord::Base
  # associações
  belongs_to :user
  has_many :photos
  has_many :videos
 
  # validações
  # presença
  validates_presence_of :title
  validates_presence_of :content
 
  # tamanho máximo
  validates_length_of :title, :maximum => 255
end

Se você usar Paperclip para anexar as fotos e vídeos, quando você apagar uma mensagem os arquivos de fotos e vídeos iram continuar a existir no disco rígido.

Para forçar que todas as relações filhas sejam apagadas quando você excluir a mensagem, você deve adicionar :dependent => :destroy na declaração has_many, ficando assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Message < ActiveRecord::Base
  # associações
  belongs_to :user
  has_many :photos, :dependent => :destroy
  has_many :videos, :dependent => :destroy
 
  # validações
  # presença
  validates_presence_of :title
  validates_presence_of :content
 
  # tamanho máximo
  validates_length_of :title, :maximum => 255
end

Essa alteração força para que todos os dependentes sejam excluídos.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby on Rails como usar callbacks do plugin Paperclip

Postado em 20 abr 2009
Categoria(s) Ruby on Rails

No plugin Paperclip existem dois callbacks que podem ser usados no model.

O primeiro é o before_column_post_process usado antes de salvar e o segundo after_column_post_process usado depois de salvar.

Onde aparece column troque pelo nome da sua coluna do anexo.

Por exemplo, a minha coluna se chama file, logo os nomes dos métodos ficam before_file_post_process e after_file_post_process:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Image < ActiveRecord::Base
  has_attached_file :file,
                    :styles => {:large => '600x600>', :medium => '300x300>', :small => '150x150>', :thumb => '50x50>'},
                    :path => ":rails_root/public/images/:id/:style_:basename.:extension",
                    :url => "/images/:id/:style_:basename.:extension"
  validates_attachment_presence :file
  validates_attachment_content_type :file, :content_type => ['image/jpeg', 'image/png', 'image/gif']
  before_file_post_process :post_before_process_file
  after_file_post_process :post_after_process_file
 
  def post_before_process_file
    raise "Executado antes de salvar"
  end
 
  def post_after_process_file
    raise "Executado depois de salvar"
  end
end

Você pode usar esses callbacks para fazer algum tratamento adicional nos anexos.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Sistema de gerenciamento de torneios de futebol

Postado em 02 abr 2009
Categoria(s) CSS, Projetos, Ruby on Rails, WEB, Web 2.0

Essa semana eu entreguei um sistema de gerenciamento de torneios de futebol, eu já tinha feito esse sistema há um tempo atrás em PHP, mas percebi que estava muito enrolado para dar manunteção no código então resolvi refazer ele do zero em Ruby on Rails 2.2.2, aproveitei também para fazer diversas melhorias e implementar novos conceitos.

Esse sistema está disponível em http://campeonatos.centroirai.com.br, ele é um sistema universal de gerenciamento de torneios de futebol, ou seja, é possível colocar nele vários formatos diferentes de torneios de futebol e o sistema consegue gerenciar todo o conteúdo.

Página Inicial

O sistema é composto de duas áreas, a primeira é a área de visualização do visitantes http://campeonatos.centroirai.com.br a segunda é a área administrativa http://campeonatos.centroirai.com.br/admin, através da área administrativa é possível administrar todos as informações que compõem um determinado torneio.

Área Administrativa

Área Administrativa

O sistema trabalha em cima de torneios, desta forma o principal conteúdo é o torneio e todos os demais conteúdos estão relacionados com o torneio.

No gerenciamento do torneio é possível definir se ele está ativo, uma imagem para ilustrar, data de início, data de término, também é possível definir se o torneio está aberto para receber pré-inscrições de jogadores, essa opção permite que as pessoas interessadas possam fazer a sua pré-inscrição para participar do torneio.

Cadastro de Torneio

Cadastro de Torneio

A grande parte dos conteúdos do sistema aceitam descrição, para os campos de descrição foi usado o MCE Editor, desta forma é possível dar uma maior flexibilidade para o usuário alimentar o conteúdo do sistema.

Através da área administrativa é possível gerenciar os jogadores, gerenciar as equipes, fazer a associação entre jogadores e equipes, definir as etapas do torneio, os grupos dentro de cada etapa, gerenciar os jogos (definindo o confronto, data e hora), gerenciamento de placares dos jogos, gerenciamento de empresas que apoiam o torneio, gerenciamento de álbum de fotos, gerenciamento de vídeos com upload no formato flv e conteúdo do YouTube. O sistema também proporciona a criação de banners no topo, rodapé e menu lateral para cada torneio, desta forma é possível ter patrocinadores específicos para cada torneio. Todas as pré-inscrições recebidas também podem ser gerenciadas através da área administrativa, bem como o regulamento do torneio, que aceita descrição ou upload de um arquivo PDF com o regulamento.

Associação de jogadores x equipes

Associação de jogadores x equipes

Tanto as etapas como os grupos podem ser ordenados através de drag e drop, esse ordenamento é levando em consideração na exibição dos jogos e classificações na área de visualização dos visitantes.

Ordenação de etapas drag e drop

Ordenação de etapas drag e drop

Cadastro de jogo

Cadastro de jogo

Na definição do placar e possível definir a quantidade de gols que cada jogador de cada time vez, desta forma o sistema consegue obter a artilharia do torneio.

Cadastro de placar

Cadastro de placar

O sistema aceita N álbuns de fotos, e N fotos relacionadas com o álbum, os formatos de imagens aceitos são jpg, gif ou png. Todos os conteúdos que tem imagens trabalham com lightbox para exibição das imagens e navegação entre próxima e anterior.

Lightbox para as imagens

Lightbox para as imagens

Para agregar mais informação e interesse no sistema foi adicionado a parte de vídeos, onde e possível fazer upload de arquivos FLV ou vincular o conteúdo com o YouTube.

Vídeos do YouTube

Vídeos do YouTube

Vídeo FLV

Vídeo FLV

Já na área de visualização pelos visitantes existe a funcionalidade acompanhar o desempenho da equipe, ver os próximos jogos, classificação no torneio, os jogadores que fazem parte de cada equipe, regulamento, artilharia, fotos, vídeos, empresas que apoiam o torneio e banners de patrocionadores no topo, rodapé e menu lateral.

Página da equipe

Página da equipe

Classificações do torneio

Classificações do torneio

Jogos do torneio

Jogos do torneio

Artilharia do torneio

Artilharia do torneio

Álbuns de fotos

Álbuns de fotos

Vídeos

Vídeos

Para construir esse projeto em Ruby on Rails eu usei as gems: fastercsv (para exportar os contatos dos jogadores para csv), will_paginate, paperclip e os plugins: activerecord_i18n_defaults e lightbox.

  • Share/Bookmark