juliovich
juliovich

Reputation: 39

How to refactor the controller methods?

I want to know if is possible to refactor the same lines of code but in two differnts methods in the controller.

class CigsController < ApplicationController
  def home
    Time.zone = 'Amsterdam'
    Groupdate.time_zone = 'Amsterdam'

    @date_now = Time.zone.now
    @day_date_now = @date_now.day

    @cigs = Cig.all
    @a_r_r_today_cigs = Cig.where(date: Time.zone.now.midnight..Time.zone.now)
end
  def index
    Time.zone = 'Amsterdam'
    Groupdate.time_zone = 'Amsterdam'

    @cigs = Cig.all
    @a_r_r_today_cigs = Cig.where(date: Time.zone.now.midnight..Time.zone.now)
  end

Upvotes: 0

Views: 42

Answers (1)

user5085788
user5085788

Reputation:

You could use before_action (https://guides.rubyonrails.org/action_controller_overview.html#filters)

class CigsController < ApplicationController
  before_action :set_variables, only: [:home, :index]

  def home
    @date_now = Time.zone.now
    @day_date_now = @date_now.day
  end

  def index
  end

  private

  def set_variables
    Time.zone = 'Amsterdam'
    Groupdate.time_zone = 'Amsterdam'

    @cigs = Cig.all
    @a_r_r_today_cigs = Cig.where(date: Time.zone.now.midnight..Time.zone.now)
  end
end

Or you could just call the method manually:

class CigsController < ApplicationController
  def home
    set_variables
    @date_now = Time.zone.now
    @day_date_now = @date_now.day
  end

  def index
    set_variables
  end

  private

  def set_variables
    Time.zone = 'Amsterdam'
    Groupdate.time_zone = 'Amsterdam'

    @cigs = Cig.all
    @a_r_r_today_cigs = Cig.where(date: Time.zone.now.midnight..Time.zone.now)
  end
end

Upvotes: 1

Related Questions