acts_as_digested_on is a gem for Rails 3 and Rails 4.
This sets the digested value before validation and validates uniqueness of the digested value.
If you use this gem for Rails 2, see rails-2 branch.
Add this line to your application's Gemfile:
gem 'acts_as_digested_on'
And then execute:
$ bundle
Or install it yourself as:
$ gem install acts_as_digested_on
# db/migrate/20090706000000_create_articles.rb
class CreateArticles < ActiveRecord::Migration
def self.up
create_table :articles do |t|
t.text :url # any type is ok
t.string :digest # this is sha-1 hex digest field of url value
...
end
add_index :articles, :digest, :unique => true # you can add index on digest field
end
def self.down
drop_table :articles
end
end
# app/models/article.rb
class Article < ActiveRecord::Base
acts_as_digested_on :url # please add this
...
end
# this means
class Article < ActiveRecord::Base
validates_uniqueness_of :digest
before_validation :set_digest
def generate_digest
Digest::SHA1.hexdigest "--#{ url.to_s }--"
end
private
def set_digest
self.digest = generate_digest
end
...
end
acts_as_digested_on :url, :unique => false
acts_as_digested_on :url, :digest_column => :url_digest
acts_as_digested_on [:url, :salt]
acts_as_digested_on :url, :scope => :site_id
Article.new(:url => 'http://example.com').generate_digest
- Fork it ( https://github.com/milk1000cc/acts_as_digested_on/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request