Is there documentation for the Rails column types?

Guidelines built from personal experience: String: Limited to 255 characters (depending on DBMS) Use for short text fields (names, emails, etc) Text: Unlimited length (depending on DBMS) Use for comments, blog posts, etc. General rule of thumb: if it’s captured via textarea, use Text. For input using textfields, use string. Integer: Whole numbers Float: Decimal … Read more

Rails: validate uniqueness of two columns (together)

You can use a uniqueness validation with the scope option. Also, you should add a unique index to the DB to prevent new records from passing the validations when checked at the same time before being written: class AddUniqueIndexToReleases < ActiveRecord::Migration def change add_index :releases, [:country, :medium], unique: true end end class Release < ActiveRecord::Base … Read more

Determine what attributes were changed in Rails after_save callback?

Rails 5.1+ Use saved_change_to_published?: class SomeModel < ActiveRecord::Base after_update :send_notification_after_change def send_notification_after_change Notification.send(…) if (saved_change_to_published? && self.published == true) end end Or if you prefer, saved_change_to_attribute?(:published). Rails 3–5.1 Warning This approach works through Rails 5.1 (but is deprecated in 5.1 and has breaking changes in 5.2). You can read about the change in this pull … Read more

Add timestamps to an existing table

The timestamp helper is only available in the create_table block. You can add these columns by specifying the column types manually: class AddTimestampsToUser < ActiveRecord::Migration def change_table add_column :users, :created_at, :datetime, null: false add_column :users, :updated_at, :datetime, null: false end end While this does not have the same terse syntax as the add_timestamps method you … Read more

Check if a table exists in Rails

In Rails 5 the API became explicit regarding tables/views, collectively data sources. # Tables and views ActiveRecord::Base.connection.data_sources ActiveRecord::Base.connection.data_source_exists? ‘kittens’ # Tables ActiveRecord::Base.connection.tables ActiveRecord::Base.connection.table_exists? ‘kittens’ # Views ActiveRecord::Base.connection.views ActiveRecord::Base.connection.view_exists? ‘kittens’ In Rails 2, 3 & 4 the API is about tables. # Listing of all tables and views ActiveRecord::Base.connection.tables # Checks for existence of kittens table/view … Read more

Repairing Postgresql after upgrading to OSX 10.7 Lion

It’s a PATH issue. Mac OSX Lion includes Postgresql in the system now. If you do a which psql you’ll likely see usr/bin/psql instead of usr/local/bin/psql which is HomeBrew’s correct one. If you run brew doctor you should get a message stating that you need to add usr/local/bin to the head of your PATH env … Read more