Rails tip #1: Reloadable custom FormBuilder
August Lilleaas has a nice writeup on making your own FormBuilder
. Towards the end, he describes wiring it up as the default:
Create a new file called
config/initializers/setup.rb
. Or, if you’re on pre-2.0, add it to the bottom ofconfig/environment.rb
:ActionView::Base.default_form_builder = LabellingFormBuilder
Though “proper,” this approach requires restarting the server to see changes in LabellingFormBuilder
.
You can avoid restarting the server by doing this instead:
class ActionView::Base
def self.default_form_builder
LabellingFormBuilder
end
end
It’s a subtle difference, but it provides a nice window into understanding the Dependencies
mechanism:
In August’s version, const_missing
loads the LabellingFormBuilder
class only once, when the initializer is run.
In our version, we’ve tricked const_missing
into running on each request by not holding onto the class it loads. That is, instead of caching the class lookup in @@default_form_builder
, we’re allowing the lookup to be performed on demand.
Sweet.
5 Rails tips
Each day this week, Joachim and I will post something we’ve learned in our time programming together. It’s fun to do, and we might just win something as well.