diff options
Diffstat (limited to 'public/rails-improvements.md')
-rw-r--r-- | public/rails-improvements.md | 87 |
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 |