0

I have some global snippets that are being queried nearly through out the whole application. All works but when i look at my logs i realise that things don't look pretty. I was wondering if there is a way of refactoring the code. Any help is appreciated.

module ApplicationHelper
  include GlobalSettings
end

The query looks something like this.

module GlobalSettings

  def app_facebook_page
    "http://facebook.com/#{account_setting.facebook}" if account_setting.facebook.present?
  end

  def app_linkedin
    "https://www.linkedin.com/#{account_setting.linkedin}" if account_setting.linkedin.present?
  end

  def app_twitter
    "https://twitter.com/#{account_setting.twitter}" if account_setting.twitter.present?
  end

  def app_google_plus
    "https://plus.google.com/#{account_setting.googleplus}" if account_setting.googleplus.present?
  end

  def app_instagram
    "https://instagram.com/#{account_setting.instagram}" if account_setting.instagram.present?
  end

  def app_pinterest
    "https://www.pinterest.com/#{account_setting.pinterest}" if account_setting.pinterest.present?
  end

  def app_address
    account_setting.address.empty? ? '' : account_setting.address
  end

  def app_meta_title
    account_setting.title.empty? ? '' : account_setting.title
  end

  def app_meta_description
    account_setting.description.empty? ? '' : account_setting.description
  end

  def app_city
    account_setting.city.empty? ? '' : account_setting.city
  end

  def app_postcode
    account_setting.postcode.empty? ? '' : account_setting.postcode
  end

  def app_google_analytics
    account_setting.google_analytics.nil? ? '' : account_setting.google_analytics
  end

  def app_country
    account_setting.country.empty? ? '' : account_setting.country
  end

  def app_logo
    if account_setting.logo.blank?
      "#{ current_account.subdomain.capitalize }"
    else
      cl_image_tag("#{ account_setting.logo }", height: '30')
    end
  end

  def app_favicon
    if current_account
      if account_setting.favicon.blank?
        '/assets/favicon/apple-touch-icon-144.png'
      else
        "#{account_setting.favicon}"
      end
    end
  end

  def app_social_cover
    if current_account
      if  account_setting.social_cover.blank?
        '/assets/facebook-timeline.png'
      else
        "#{account_setting.social_cover}"
      end
    end
  end

  def account_setting
    Setting.last
  end

end

My logs look somewhat unclean. What can one do to fix this?

Started GET "/settings/1/edit" for 127.0.0.1 at 2015-05-04 00:44:59 +0200
Processing by SettingsController#edit as HTML
  Parameters: {"id"=>"1"}
  User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
  Account Load (0.2ms)  SELECT  "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."subdomain" = $1 LIMIT 1  [["subdomain", "demo"]]
  Setting Load (0.3ms)  SELECT  "settings".* FROM "settings" WHERE "settings"."id" = $1 LIMIT 1  [["id", 1]]
  Setting Load (1.9ms)  SELECT  "settings".* FROM "settings" WHERE "settings"."account_id" = $1 LIMIT 1  [["account_id", 1]]
  Rendered settings/edit.html.slim within layouts/emet (76.9ms)
  Setting Load (1.3ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  Account Load (0.6ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.1ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.1ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.1ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.2ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.1ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.1ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.1ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (1.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.1ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.1ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.1ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.1ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.1ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.1ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.1ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.1ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.3ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.1ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.0ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  CACHE (0.1ms)  SELECT  "settings".* FROM "settings"  ORDER BY "settings"."id" DESC LIMIT 1
  CACHE (0.1ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."id" IN (1)
  Rendered application/head/_social_metadata.html.slim (146.3ms)
  Rendered application/nav/_navigation_links.html.slim (0.8ms)
  Rendered application/nav/_navigation.html.slim (2.6ms)
Completed 200 OK in 479ms (Views: 466.1ms | ActiveRecord: 9.1ms)

1 Answer 1

2

I would cache the account_setting in the helper. The only method that would be affected would be: account_setting. I would write it:

def account_setting
  @account_setting ||= Setting.last
end

This should result in far fewer round trips to the db.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you very much. Looks cleaner.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.