Acabo de disponibilizar outro plugin, o ActsAsDeleted.
Este plugin serve para que seus registros não sejam apagados do banco.
Mas como assim não apagar?
Certas aplicações necessitam que seus dados não sejam apagados quando um usuário aperta um botão delete, como é o caso no meu projeto atual, onde trabalho com muitos registros financeiros.
Estes dados simplesmente não aparecem mais no sistema, por questões de segurança, de auditoria ou simplesmente porque seu chefe quer assim.
Este plugin disponibiliza métodos para que isso seja possível facilmente, sem a necessidade de ficar criando métodos, inserindo nos models e etc.
Tudo em um só local, cool, DRY ;)
Sim existem 2 outros plugins(só achei dois),
O segundo não me agradou por trabalhar com uma tabela a mais somente para guardar os registros apagados, eu prefiro tê-los na mesma tabela.
O primeiro é muito bom, trabalha com apenas um campo datetime e segue quase a mesma forma que o meu.
Porém tive alguns problemas com validação conforme explico no fim do tutorial, não sei se por que não consegui utilizar direito ou por falha do plugin, entre outras coisas que não me atendiam.
Editado - OBS: cometi um engano, o acts_as_paranoid faz validação sim, usando a mesma opção :scope é possível conseguir a validação
Eu precisava de um campo de flag que não fosse uma data, até para mostrar em possível recuperação de registro na tela do administrador, além de um campo para guardar o usuário que fez a cagada, ops, apagou o registro :D
Enfim nasceu o rebento.
Fonte no github: ActsAsDeleted
Um tutozinho:
REQUER Rails >= 2.1
Instalando o plugin:
script/plugin install git://github.com/kivanio/acts_as_deleted.git
Exemplo
=======
Em sua migration:
class CreateCars < ActiveRecord::Migration
def self.up
create_table :cars do |t|
t.string :name
# Use "deletestamps" para criar as colunas "deleted" e "deleted_at"
# Passando o argumento "true", será criada a coluna "deleted_id" para usar com o plugin restful-authentication
t.deletestamps(true)
t.timestamps
end
end
def self.down
drop_table :cars
end
end
Em seu model:
class Car < ActiveRecord::Base
acts_as_deleted
end
Depois disso em seu Controller:
class CarController < ApplicationController
# Use o scope "without_deleted" para procurar por registros que não estão marcados como deletados.
def index
@cars = Car.without_deleted.find :all
end
# Use o scope "with_deleted" para procurar por registros marcados como deletados.
def all
@cars = Car.with_deleted.find :all
end
#Use apenas find para todos os registros
def all
@cars = car.find :all
end
# Em sua action destroy use o método "delete" para esconder os registros
def destroy
@car = Car.find(params[:id])
if @car.delete
flash[:notice] = 'Bye Bye Car.'
end
redirect_to(cars_url)
end
# Quando você estiver usando o plugin restful-authentication, você pode usa "delete_with_user" para gravar o usuário que apagou o registro.
def destroy_with_user
@car = Car.find(params[:id])
if @car.delete_with_user(current_user.id)
flash[:notice] = 'Bye Bye Car.'
end
redirect_to(cars_url)
end
end
Dicas:
Para usar o validates_uniqueness_of com este plugin, você deve usar a opção :scope do validates_uniqueness_of.
validates_uniqueness_of :name, :scope => :deleted
Será validado então "name AND deleted" ao invés de apenas "name",
assim você terá ter vários registros apagados com mesmo nome, porém apenas um não apagado com este nome.
Bem simples!
Gostou?
Recomende-me: http://www.workingwithrails.com/recommendation/new/person/5679-kivanio-pereira-barbosa
Liberei o fonte do plugin ActsAsPayment esta noite.
Um plugin para agregar formas de pagamento brasileiras.
Foi retirado de um projeto em produção, onde já são emitidos boletos,
resolvi liberar o código como forma de retribuição a tudo que a comunidade me proporcionou nestes últimos anos trabalhando com Ruby/Rails.
Espero que seja o ponto de partida para que outros boletos possam ser incorporados a partir do código base deste.
O código não é perfeito, mas qual é? :D
Refatorações, testes e tudo mais são bem vindos, por isso o plugin está no github aguardando forks de quem quiser colaborar.
Não tenho intenção nem pretensão de substituir nenhum outro plugin existente, porém acredito que opções são bem vindas.
Não tenho compromisso nem comprometimento de fazer novas implementações de layouts de boletos para outros bancos, porém como disse, o código está ai para ser melhorado.
E quem quiser o fazer, sinta-se a vontade para entrar em contato comigo ou fazer um fork do projeto.
A intenção é que o plugin se torne um gem, para uso independente de Rails, porém dependente de Ruby :D
E não, não tenho nada contra Rails( Eu ganho dinheito com ele ;) ), só acho que uma gem independente, é mais agradável a todos, inclusive aos que utilizam Merb dentre outros frameworks.
Por enquanto está disponível o boleto com carteira 18, convênio de 7 dígitos e nosso número de até 10 dígitos para o Banco do Brasil, com geração tanto em HTML como PDF.
Outras carteiras são bem simples de implementar, portanto mãos a obra ;)
A leitura de remessa está sendo portada para o plugin e em breve também estará disponível.
Por enquanto é isso, aguardem ais novidades :)
Fonte: acts_as_payment
PATH=${PATH}:/usr/local/mysql/bin:/opt/local/bin:/usr/local/bin:/usr/local/sbin:/opt/local/sbin:/opt/local/lib/postgresql83/bin:$PATH
ficando assim:
sudo env ARCHFLAGS='-arch i386' gem install postgres -- --with-pgsql-lib-dir=/opt/local/lib/postgresql83 --with-pgsql-include-dir=/opt/local/include/postgresql83- Abra o prompt de comandos como administrador(Clicar com o direito em cima)
- Digite este comando para desabilitar o auto-tuning(Mais uma cagada que provoca várias incompatibilidades entre protocolos)
netsh interface tcp set global autotuninglevel=disabled - Geralmente vem em modo normal, para verificar como está configurado, use o comando: netsh interface tcp show global
<%= error_messages_for :game, :header_message => "Por favor, tente novamente!", :message => "Nós tivemos alguns problemas ao gravar:" %>
fonte: http://www.softiesonrails.com/2008/4/23/better-messages-for-activerecord-validation-errors




