Rails 4.2 Foreign Key Support

Database constraints for comments and users help enforce referential integrity, but support is limited to certain adapters and can surface ActiveRecord::InvalidForeignKey errors.

Spreewald 1.2.11 fixes frequent "no alert open" errors on Chrome

Chrome updates can cause frequent no alert open errors in Capybara dialog tests. Spreewald 1.2.11 waits for browser dialogs before confirming them.

How to fix a corrupt (zsh) history file

Corrupted zsh history files trigger startup errors and can be rebuilt by extracting valid entries from the damaged history data.

Capistrano 3 has slightly changed its symlink implementation

Capistrano 3 symlinks linked directories using the full path, so public/system now points to shared/public/system instead of shared/system.

JavaScript events: target vs currentTarget

event.target points to the clicked descendant, while event.currentTarget points to the element handling the listener; currentTarget is usually the safer choice.

A commitment is not a guarantee - Pivotal Tracker

Teams can commit to quality software, but cannot guarantee outcomes they do not fully control.

How to capture changes in after_commit

after_commit callbacks lose access to unsaved change data when Rails clears dirty tracking at commit. Rails 5+ provides saved_change_to_attribute? and previous_changes for commit-time checks.

How to fix: iPad does not trigger click event on some elements

iPad tap handling can ignore delegated click events on some elements, especially table rows. Adding cursor: pointer or an onclick attribute makes them respond.

24 little known CSS facts

Little-known CSS properties and selectors affect outlines, typography, and pseudo-elements, with browser support varying across features.

The Complete Guide to Rails Caching

Caching in Ruby on Rails reduces repeated work and speeds up pages, but stale or fragmented cache data can hurt performance and correctness.

Padrino: "incompatible marshal file format (can't be read)"

Old cached fragments marshaled by a previous Padrino version can trigger TypeError after deployment; clearing external cache stores fixes incompatible marshal data.

emcien/iso_latte

Background jobs can die from memory exhaustion, segmentation faults, or abrupt exits; IsoLatte runs code in a subprocess and reports exceptions through a pipe.

Savon: Use complex SOAP types as arguments

Manual xsi:type assignment lets Savon send complex SOAP arguments to remote methods when generated stubs are unavailable.

Protip: Clone large projects multiple times

Long test suites block new work on large projects; cloning the repository into a separate directory lets tests run in parallel while development continues.

Free advice: show up early

Delays from taxis, flights, and other travel disruptions can make you look unreliable unless you plan extra time into professional schedules.

Material Design Lite

CSS and JavaScript toolkit for applying Google’s Material Design to static websites, but it is incomplete, awkward to use, and can conflict with live reload or JavaScript frameworks.

FactoryGirl: How to easily create users with first and last name

Create a user factory that accepts one full-name value and splits it into first and last name automatically, reducing repetitive test setup.

PostgreSQL: Ordering, NULLs, and indexes

PostgreSQL sorting puts NULL values first or last depending on direction, and matching index order is needed for efficient multi-column queries.

How to disable auto-complete on login forms

Browser password managers ignore autocomplete=off on login forms, and disabling autocomplete weakens passwords. Hidden fields can stop saving, but not improve security.

SmartUnderline

Open-source JavaScript library for rendering more readable, visually polished underlines with less awkward line breaks and spacing.

Use Capybara commands inside an IFRAME

Interact with forms and buttons in embedded web pages by switching Capybara into an iframe; the same pattern also works for reusable Cucumber steps.

Faster debugging with RubyMine macros

RubyMine keyboard macros can speed up inserting binding.pry breakpoints and temporary .tap inspection code during Ruby debugging.

ZenTest "invalid gemspec" / "Illformed requirement"

Invalid ZenTest gemspecs can fail with an ill-formed dependency requirement when Rubygems is too old. Updating Rubygems to a newer version resolves the install error.

Copy & Paste & The Web | CSS-Tricks

Controlling copy and paste on the web can improve user flows and enable custom clipboard behavior. Modern JavaScript can trigger copy actions without Flash.