Order of the state_machine callback chain
Callback order in state_machine matters when transitions depend on validation and persistence; aborting the chain can stop a transition from completing.
How to fix "Too many authentic authentication failures" with SSH and/or Capistrano
SSH or Capistrano connections can fail when ssh-agent offers too many keys and servers stop after repeated authentication attempts.
Why your all.js is empty on staging or production
When you include a non-existing Javascript file, you probably won't notice it during development. But with caching active (on production or staging) Rails will write an empty all.js file without complaining.
Slugs with FriendlyId
Gem to provide nice looking urls ("/blog/the-greatest-bug-i-never-fixed"). If you don't need anything too special (like i18n for the urls) it works as a drop-in-replacement. It basically overwrites #to_param to return the slug, and .find to search by the slug.
Make sure, everywhere you build paths, you use model_path(:id => model) instead of model_path(:id => model.id). You also need to adapt all code using something like .find_by_id. The regular .find is fine.
See the github README for installation instructions.
Don't forget ...
Copy a Paperclip attachment to another record
Reusing a Paperclip attachment on another record duplicates the file on save; a custom accessor can expose the original URL for form-based copying.
Force absolute URLs in views throughout a response
Relative view helpers generate path-only links and persistent asset hosts; enforcing full URLs needs separate handling for asset_host and rewrite_options.
Unobtrusive JavaScript and AJAX
AJAX-inserted content needs re-running jQuery behavior bindings; $.unobtrusive() scopes activation to new DOM nodes and activateUnobtrusiveJavascript() triggers it manually.
Javascript Compressor - compress code online for free
Reduce JavaScript source size and make code harder to read with a free online compressor for quick minification and obfuscation.
Highlighted prompt for production shells
Insert into ~/.bashrc and reload afterwards: source ~/.bashrc
PS1='${debian_chroot:+($debian_chroot)}\[\033[41;33m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
Apple iPhone Water Damage
Below are 12 easy steps to follow if you're iPhone has experienced water damage.
RubySpec - The Standard You Trust
RubySpec is a project to write a complete, executable specification for the Ruby programming language.
stefankroes's ancestry at master - GitHub
Ancestry is a gem/plugin that allows the records of a Ruby on Rails ActiveRecord model to be organised as a tree structure (or hierarchy). It uses a single, intuitively formatted database column, using a variation on the materialised path pattern. It exposes all the standard tree structure relations (ancestors, parent, root, children, siblings, descendants) and all of them can be fetched in a single sql query. Additional features are STI support, named_scopes, depth caching, depth constraints, easy migration from older plugins/gems, integrit...
Rethinking Rails 3 Controllers and Routes | Free PeepCode Blog
The Rails router has been written and rewritten at least four times2, including a recent rewrite for the upcoming Rails 3. The syntax is now more concise.<br />
<br />
But never mind making it shorter! It’s time for a final rewrite: Let’s get rid of it altogether!
Announcing the jQuery Mobile Project | jQuery Mobile
The jQuery project is really excited to announce the work that we’ve been doing to bring jQuery to mobile devices. Not only is the core jQuery library being improved to work across all of the major mobile platforms, but we’re also working to release a complete, unified, mobile UI framework.
Mule Design Studio’s Blog: Tips On Buying Design
You’re a business, calling a business, about conducting business. Don’t be surprised when money comes up.
Selling your software in China « Successful Software
The first thing I need to say, right off the bat: Chinese users will not buy your software. Period. That does not mean that there is no money to be made, it simply means that they will not pay for your software license.
Interoperability Happens - Death to Best Practices
Computer science is about tradeoffs and hard choices. Optimizing the code or design or architecture one way means taking hits another way.
jbarnette's johnson at master - GitHub
Johnson wraps JavaScript in a loving Ruby embrace. It embeds the Mozilla SpiderMonkey JavaScript runtime as a C extension.
mynyml's holygrail at master - GitHub
The Holy Grail of testing for front-end development; execute browser-less, console-based, javascript + DOM code right from within your Rails test suite.
pivotalexperimental's jazz_money at master - GitHub
Run your Jasmine specs without a browser
Use your singletons wisely: ten years later - The Code Whisperer
While injecting the dependency appeared to make the classes more tightly coupled, it simply revealed the coupling that already existed. A was already tightly coupled to B and B to C. When we tried to inject the dependency, we made that coupling more explicit and easier to remove.