In meiner Anwendung habe ich eine WebsiteAd
Modell & website_ads
Tabelle, wo ich alle meine Websites Anzeigen habe, die ich von meinem Administrator steuern kann.Ruby On Rails - Machen Sie weniger Datenbankabfragen
Zur Zeit auf einer Seite suche ich 1 für jede Anzeige zur Datenbank und in meiner Ansicht auch, um zu sehen, ob die Anzeige active
ist.
In meinem Controller:
# START - Desktop ads
def ads_desktop_tablet
@header_desktop_tablet = ad_placement('header_desktop-tablet')
@footer_desktop_tablet = ad_placement('footer_desktop-tablet')
@footer_desktop_tablet_c = ad_placement('footer_desktop-tablet_C')
@desktop_tablet_b1 = ad_placement('desktop-tablet_B1')
@desktop_tablet_b2 = ad_placement('desktop-tablet_B2')
@desktop_tablet_b3 = ad_placement('desktop-tablet_B3')
@desktop_tablet_s1 = ad_placement('desktop-tablet_S1')
@desktop_inline_banner = ad_placement('desktop_inline_banner')
@desktop_inline_video = ad_placement('desktop_inline_video')
@desktop_tablet_b2_c = ad_placement('desktop-tablet_B2_C')
@desktop_tablet_b3_c = ad_placement('desktop-tablet_B3_C')
@desktop_tablet_s1_c = ad_placement('desktop-tablet_S1_C')
@desktop_tablet_l1 = ad_placement('desktop-tablet_L1')
end
# END - Desktop ads
# START - Mobile ads
def ads_mobile
@header_mobile = ad_placement('header_mobile')
@footer_mobile = ad_placement('footer_mobile')
@mobile_b1 = ad_placement('mobile_B1')
@mobile_b2 = ad_placement('mobile_B2')
@mobile_b3 = ad_placement('mobile_B3')
@mobile_s1 = ad_placement('mobile_S1')
@mobile_inline_banner = ad_placement('mobile_inline_banner')
@mobile_b3_c = ad_placement('mobile_B3_C')
end
# END - Mobile ads
In meinem Helfer:
def ad_placement(placement)
WebsiteAd.where(placement: placement).first
end
# I have a method/`def` for each ad like below
def ad_desk_s1_active?
if desktop_tablet_s1.status == true
desktop_tablet_s1.ad_tag.html_safe
end
end
Aus meiner Sicht:
= ad_desk_s1_active?
Ich weiß, das nicht ist t eine gute Übung und einen richtigen Weg. Wie kann ich dies effizienter und viel weniger Code und Datenbankabfragen machen?
Danke @Iceman. Funktioniert super :). Ist es eine Möglichkeit, es zu tun, tut weniger DB-Abfragen als gut? Jetzt macht es die gleiche Menge an Anfrage wie zuvor. –
Hmm, es sollte nur eine Abfrage sein, um alle Anzeigen zu bekommen und diese in eine Hash-Variable zu setzen. Dann wählst du einfach aus. Nur ein Anruf bei der db. – Iceman
Großartig. Da muss ich "ad_tag" "pflücken" und einen "html_safe" ausführen. Wie kann ich das machen? Ich habe das getan: 'WebsiteAd.all.index_by (&: placement) .pluck (: ad_tag) .html_safe' aber ich bekomme Fehler:' undefined method pluck' Danke für deine Hilfe :) –