2015-05-04 4 views
0

У меня есть некоторые глобальные фрагменты, которые запрашиваются почти через все приложение. Все работает, но когда я смотрю на свои журналы, я понимаю, что все выглядит не очень красиво. Мне было интересно, есть ли способ рефакторинга кода. Любая помощь приветствуется.Рефакторинг активной записи глобального запроса в rails

module ApplicationHelper 
    include GlobalSettings 
end 

Запрос выглядит примерно так.

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 

Мои журналы выглядят несколько нечистыми. Что можно сделать, чтобы исправить это?

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) 

ответ

2

Я бы спрятал account_setting в помощнике. Единственный метод, который будет затронут, будет: account_setting. Я бы это написал:

def account_setting 
    @account_setting ||= Setting.last 
end 

Это должно привести к гораздо меньшему количеству поездок в оба конца до дБ.

+0

спасибо. Выглядит чище. – Benjamin

Смежные вопросы