Use Delegate in Rails

Reading time ~1 minute

To understand what delegate work, let’s see the following code:

    = link_to queue_item.video_title,
    = link_to queue_item.category_name, queue_item.category

Suppose we had some template in the view that we call from our queueitem model. We want the video_title from it. Actually, we can just call or But we can make them more friendly by use delegate in the model.

  class QueueItem < ActiveRecord::Base
    belongs_to :user
    belongs_to :video

    delegate :category, to: :video
    delegate :title, to: :video, prefix: :video

  class Video < ActiveRecord::Base
    belongs_to :category
    has_many :reviews, -> {order("created_at DESC")}
    validates :title, presence: true
    validates :description, presence: true

If you read this line: delegate :title, to: :video, prefix: :video, it tells you that you can find the title method in the video model, and in this model, you add the prefix video_title, so queue_item.video_title now is calling the video.title

take away

  • Delegation is particularly useful with Active Record associations.
  • Multiple delegates to the same target are allowed

to_param in Ruby on Rails

If I want a custom slug=======================I walk through this cutstom slug.1. create migration `add_slug` to add a column inside the...… Continue reading

What is ORM in Rails mean?

Published on July 14, 2017