2015-05-04 40 views
0

我有幾個全局代碼片段正在被查詢幾乎遍及整個應用程序。所有的作品,但當我看着我的日誌,我意識到事情看起來不漂亮。我想知道是否有重構代碼的方法。任何幫助表示讚賞。在軌中重構活動記錄全局查詢

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