Best gems for beginners
Ruby Gems are essential for every Ruby on Rails programmer. They are a small pieces of already written and tested code which provide some functionality. For example, there are many gems which provides admin interface for your app. It means that you instal the gem, make some basic setup and you are all set to use the admin section. You can manage your resources there. This of course doesn’t mean that you can not write exactly the same thing on your own. You can create admin namespace, controllers and manually prepare all the views for each of your models. This is not a hard job, for sure, but it can be quite boring and time consuming, as you would need to repeat the same steps over and over again. Not just in one app for several resources but across your apps which needs such a functionality as the admin section is usually always same. The whole beauty of gems is that they will save your time by providing common and well know solutions.
The downside is that there are plenty of them. Because they solve popular problems, many people think their solution is the best, so they create gems. I gathered the most popular ones so that you can know what to look for when you will need it. I took in account beginner’s friendly gems, those which you would probably need in a fairly simple applications. Before we proceed to this list, I want to make a quick recommendation - take a look at all the gems which are over there at the official site rubygems.org or compare how each of the gems is used at ruby-toolbox.
Devise deserves to get to the top of my list as it is the absolutely
must have solution for quick login / logout / sign up functionality. You
use devise when you want to add sessions for your users, so that they
can authenticate themselves with a password and log into their account.
After adding it to your web app, it generates the controllers which
handle the sessions and the basic views for login page (as well as
registration page, have you lost your password page, etc.) You also get
handy helpers as for example
current_user, which you can use in your
controller to test if the visitor is logged or in views to display his
name… It is also good when you does not want to deal with security
stuff (encrypting the users’ passwords) as it is doing it for you.
Everything and much more is very deeply described on the Devise Github page, but do not forget to check also their wiki. One last advantage of devise - because it is so widespread and everyone is using it, when you run into some problems and google it, you will find a lots of answers. If you wish to explore the other options, this article sums it up.
Use when: you want to have users authentication on your page. Period.
By default Rails uses the
form_for for generating forms.
That’s ok but with Simple Form your life could be so much easier. Simple
form is a gem which provides a different and more intuitive way of
creating forms. It will generate whole html input with labels, error
fields and hints for you and you just need to specify the fields which
should be updated. It supports collections (so that your users can pick
a value from a list) or associations (so that in one model you can
updated also the associated fields). The best about
that you just type
form_for @user and specify the fields, the submit
button and you are ready to go. It is unbelievably quick. The gem is to
be found here.
Use when: you want to handle your form easily and in the same fashion through the entire app.
Of course you do not have to use the gem, you can just download the
source codes from their official page and link them in your application.
Using gem however is a better solution, as it is much faster and easier
and it also will get updated for you whenever you will run
update. There is also a third option, which I do not encourage because
it depends on constant internet connection. This is to use the CDN
links. CDN stands for Content Delivery Network and it is a service which
provides only the links (not the actual code) to for example bootstrap.
You can use these links and use bootstrap the same as if you would have
downloaded it. As I said, you need to be online to be able to constantly
reach the content provided elsewhere, which is not exactly good when
developing locally without internet (you would lost big part of your
So without more talking here is the gem.
Last comment on Bootstrap - if you are afraid you would just be “the same” as any other webpage using it, don’t be. Bootstrap is just a starting point, it is not your whole design. It is supposed to be customized and altered. In many pages you would not even tell that it is using bootstrap. You can apply your CSS or you can even rewrite theirs, it is completely up to you. Bootstrap is there taking care of the little things so that you can put all your energy into the big tasks.
Why to bother with grid system and make columns and rows when bootstrap has one class for it? If you are fan of frontend framworks, there is one more which is fairly popular and interesting, it is called Zurb Foundation.
Use when: you want your app to look good with minimum effort, you need a grid system or you are just not good with CSS
Rspec + Factory Girl
Rspec is a testing framework which makes your testing a pleasure instead
of a pain. It is very intuitive to use and to organize your code into
logical blocks. You can writte stuff like
user.projects.count.should_not eql(0). Testing your
controllers is also very easy; you can make request just like this:
:index and compare what cames back
response.should be_success. Rspec
documentation is available here.
The real beauty is FactoryGirl, which is a replacement for fixtures. What is it? Well, imagine you want to create objects in your test, but you do not want to repeat all over again all the necessary attributes when creating them. With FactoryGirl you can just define all your models and how to create these in one place and then in all your tests let FactoryGirl to generate objects based on these premade blueprints. The gem can be downloaded from here but there is not so much documentation. You can take a look at this article.
Use when: you want better testing environment and you want to enjoy writting tests!
We spoke a bit about Devise, which gives your web app the authentication system. Cancan is next on turn, because it extends it on authorization. With cancan you can have several roles applied to different users or groups and each role can have different rights as you specify. For example, only redactors can delete posts or only admin can view the admin section or edit user’s details. The system of roles and rights is up to you, CanCan is just making it easy to achieve. It also have a nice helpers so that you can instantly know if the current user has the rights for certain action or not. If you only need an admin role, you can create it easily on your own, but CanCan is ready for multiple types of authorizations and for more complex behaviours.
Use when: you want to have users authorization and you plan to have more complex access logic than just “admin can do all”.
Act as taggable on
I Love this simple gem! You just add one line of a code into your model which you wish to have tags, and … boom! You have tag behaviour :) It is good when you want one object to have one or zero or multiple tags and you want to filter based on that. The tags themselves are just plain names without any more information and can serve for categorization as well. You can add taggs to an object, view all its tags, search the entire model for records with specific tags, and so on. It doesn’t even have to be tag, you can define your own attributes with similar behaviour but different name, like for example skills. Take a look at the example from the gem page.
class User < ActiveRecord::Base acts_as_taggable end @user.tag_list.add("awesome", "slick") @user.tag_list.remove("awesome", "slick")
Use when: you want to support tags or tag-like behaviour with ease - for example books can have categories, people can have skills, discussion topics can have themes…
Rolify enables you to add, what a surprise, a role to your models!
It plays well with
CanCan because you can add a role like
manager to certain users and then you can manage their access
CanCan. Rolify will help you only with the assignments of
roles. You can make it very simply by yourself with just adding a boolean
attribute to your model, with the same name as the required role - admin
for example. To set an user a admin, you would just do
true. But Rolify will give you much more than that. You can have
multiple roles without adding a new attributes for them, you can easily
check if someone has that role and you can also search all the records
with a given role. It is quite similar to previously discussed Act as
Taggable on, but for a different purpose. Check it out
User when: you want multiple to have roles for your model so that you can for example build your athorization with them
Carrierwave is used for image uploading. It is very simple and quick, but I will not explain it here as there are several great tutorials for it out there. You can check this article or this one or continue directly to a CarrierWave page.
Use when: you want your users to have a possibility to upload images - for example as their profile pictures
Better Errors + Pry
I am not sure if this is a fit for beginners, but I love it so I will just briefly recommend it. Better Errors enables a very smart error page instead of the default one which is not telling you much. With Better Errors, you got a instant access to REPL whenever there is an error in your app - it is very useful for debugging. You can find it here.
Pry is even better, it gives you a possibility to set a place in your code, where you want to stop to debug and open a REPL in that place. You can gain an insight into what is happening within your code at that exact moment you need it. It is very very handy and it also have syntax highlighting! Here it is.
Use when: if you ever wrote something like
puts 'here it still
works!' - forget puts statements it and debug like a pro!
Act as indexed
Act as indexed is pain-free way how to add a full-text search into your app.
Use when: you want a quick way how to search through multiple fields in a model
Active Admin is used to add en entire admin section to your page - with management of your resources. If you want to for example view all records, delete selected ones, add new ones and alter existing ones and you need to do it for several resources, it is just for you. It will build the entire interface for you. Here is its official page.
Use when: you want complex solution for admin section - you want to manage multiple models at one place
Allows you to model relationships between models - add friends, follow
users, block users, etc.. With party boy it is easy to just write
user.follow(user2) to start a following relationship or to check for
existing ones via
user.followers. You can use it for creating
Facebook-like friends and permission to see their statuses, to implement
notification about your friends activity and much more. It just does
what it supposes to do. here is its
Use when: you want your users to be friends or followers :)
Have you ever have a index of all records with more than 100 records in it? Will paginate will fix it with simple pagination option.
Use when: you want to add multiple pages into index and have the possibility to paginate them
Will add a feed of notifications to your app! You can combine it nicely
Party Boy to display news within a user’s friends just like a
Facebook or Twitter notification bar. It has very nice
documentation with a
guide and lots of examples so I encourage you to study it there.
Use when: you want to record what is happening in your app and give your users these information as a news feed
Journey - Think. Write. Grow.
Self-improvement app which will help you to focus on your emotions, be positive and stay mindful.