Concerns are little modules that encapsulate reusable functionality. Rather than adding them to our models and controllers directly, we put them in a module and include them.
An example of a concern might be "Taggable", or "Ratable" or "HasImage"
Exercise - HasImage
We are going to create a HasImage concern which will add standard paperclip functionality to our BlogPost. We will be able to use it like this:
class BlogPost < ActiveRecord::Baseinclude HasImageend
Define your concern in a module in the app/models/concerns directory. To be automatically imported the file must be have the same name as the module, with underscores.
Because Paperclip requires you to work with the class directly we are going to use the included callback to add class methods to our module, like so:
module HasImagedef self.included(klass)klass.extend ClassMethodsendmodule ClassMethodsendend
The Paperclip documentation can be found here:
Remember to write specs for your concern.
Create a Rateable concern to allow users to rate content. The model should gain thumbs_up and thumbs_down methods, and a rating method. Store the data either in a field, or in a separate Rating model which belongs to the User model (if you have one)