summaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2014-05-08 15:07:39 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2014-05-08 15:07:39 -0400
commitc783d434d1eb019c4629aa4d5c0db5d2a3a2b22d (patch)
treee77a5627b579dcf8d4ae017969be933b882d26e8 /public
parenta353c1a77ab9e2d6809653552bd1f38615378fc4 (diff)
write about customizations I've made to Rails
Diffstat (limited to 'public')
-rw-r--r--public/rails-improvements.md87
1 files changed, 87 insertions, 0 deletions
diff --git a/public/rails-improvements.md b/public/rails-improvements.md
new file mode 100644
index 0000000..4f728fc
--- /dev/null
+++ b/public/rails-improvements.md
@@ -0,0 +1,87 @@
+Miscellaneous ways to improve your Rails experience
+===================================================
+---
+date: "2014-05-08"
+---
+
+Recently, I've been working on [a Rails web application][leaguer],
+that's really the baby of a friend of mine. Anyway, through its
+development, I've come up with a couple things that should make your
+interactions with Rails more pleasant.
+
+## Auto-(re)load classes from other directories than `app/`
+
+The development server automatically loads and reloads files from the
+`app/` directory, which is extremely nice. However, most web
+applications are going to involve modules that aren't in that
+directory; and editing those files requires re-starting the server for
+the changes to take effect.
+
+Adding the following lines to your
+[`config/application.rb`][application.rb] will allow it to
+automatically load and reload files from the `lib/` directory. You
+can of course change this to whichever directory/ies you like.
+
+ module YourApp
+ class Application < Rails::Application
+ …
+ config.autoload_paths += ["#{Rails.root}/lib"]
+ config.watchable_dirs["#{Rails.root}/lib"] = [:rb]
+ …
+ end
+ end
+
+## Have `submit_tag` generate a button instead of an input
+
+In HTML, the `<input type="submit">` tag styles slightly differently
+than other inputs or buttons. It is impossible to precisely controll
+the hight via CSS, which makes designing forms a pain. This is
+particularly noticable if you use Bootstrap 3, and put it next to
+another button; the submit button will be slightly shorter
+vertically.
+
+The obvious fix here is to use `<button type="submit">` instead. The
+following code will modify the default Rails form helpers to generate
+a button tag instead of an input tag. Just stick the code in
+[`config/initializers/form_improvements.rb`][form_improvements.rb]; it
+will override `ActionView::Hlepers::FormTagHelper#submit_tag`. It is
+mostly the standard definition of the function, except for the last
+line, which has changed.
+
+ # -*- ruby-indent-level: 2; indent-tabs-mode: nil -*-
+ module ActionView
+ module Helpers
+ module FormTagHelper
+
+ # This is modified from actionpack-4.0.2/lib/action_view/helpers/form_tag_helper.rb#submit_tag
+ def submit_tag(value = "Save changes", options = {})
+ options = options.stringify_keys
+
+ if disable_with = options.delete("disable_with")
+ message = ":disable_with option is deprecated and will be removed from Rails 4.1. " \
+ "Use 'data: { disable_with: \'Text\' }' instead."
+ ActiveSupport::Deprecation.warn message
+
+ options["data-disable-with"] = disable_with
+ end
+
+ if confirm = options.delete("confirm")
+ message = ":confirm option is deprecated and will be removed from Rails 4.1. " \
+ "Use 'data: { confirm: \'Text\' }' instead'."
+ ActiveSupport::Deprecation.warn message
+
+ options["data-confirm"] = confirm
+ end
+
+ content_tag(:button, value, { "type" => "submit", "name" => "commit", "value" => value }.update(options))
+ end
+
+ end
+ end
+ end
+
+I'll probably update this page as I tweak other things I don't like.
+
+[leaguer]: https://github.com/LukeShu/leaguer
+[application.rb]: https://github.com/LukeShu/leaguer/blob/c846cd71411ec3373a5229cacafe0df6b3673543/config/application.rb#L1
+[form_improvements.rb]: https://github.com/LukeShu/leaguer/blob/521eae01be1ca3f69b47b3170a0548c3268f4a22/config/initializers/form_improvements.rb