13 February 2017
DESCRIPTION: The model controls what is required when putting data into your database.
Scope is used for commonly used queries in the model where you want to filter the data. For example:
class Article < ApplicationRecord scope :published, where(published: true) end
This example would only show data sets where published equals true, all false published articles will not be shown.
It is good practice to put this filtering into the model rather than the controller to keep the controller cleaner.
You can also filter the database by ordering the database, and filtering out above/below certain integers or letters. For example:
class Arcticle < ApplicationRecord scope: :fresh, where("age < 20") scope: :recent, where("created_at desc").limit(3) end
This will filter out any age which is above 20, and it will take the created_at column, filter the dates in descending order, and only display the top 3.
Then in the controller if we want to call these methods from the model we can chain queries together:
This query would display articles which have been published, have an age of less than 20, and only the 3 most recent articles.
Callbacks are used within the model to run some check before any of the other methods are run.
class Article < ApplicationRecord before_save :recent_publish_check def recent_publish_check self.fresh_article = true if age < 20 end end
This will check before any article is saved to the database whether the age is less than 20, and if so it will change the fresh_article attribute from false to true if necessary.
It is also possible to stop data being saved to the database with a before_save check.
class Article < ApplicationRecord before_save :already_published def already_published return false end end
This will simply return false for any call to Article. With false being returned, the method immediately stops running and nothing is saved to the database. Be careful not to do this unless you have a good reason to do so.
Here are all the callbacks available:
class Article < ApplicationRecord before_validation after_validation before_save after_save before_create after_create before_update after_update before_destroy after_destroy end