我正在使用以下功能从公共页面中查找一些选定的记录。
def find_public_page(title)
@footer_public_pages ||= PublicPage.where(title: %w(welcome_to_toylist terms_of_services buying_a_toy selling_a_toy requesting_a_toy ad_guildelines))
@footer_public_pages.find_by(title: title)
end
我需要的是@footer_public_pages应该在第一时间存储结果集,然后在下次直接点击find_by查询而不是发出两个查询时。
任何帮助都将不胜感激。
答案 0 :(得分:1)
你可以试试这个。我希望这会对你有所帮助。
def find_public_page(title)
@footer_public_pages ||= PublicPage.where(title: %w(welcome_to_toylist terms_of_services buying_a_toy selling_a_toy requesting_a_toy ad_guildelines)).group_by(&:title)
@footer_public_pages[title].first unless @footer_public_pages[title].blank?
end
答案 1 :(得分:0)
实例变量@footer_public_pages
属于一个类,在本例中可能是控制器。由于控制器的工作方式,每个操作(即重定向)都将成为一个新实例,并且需要在调用find_public_page
时再次设置该值。如果您在同一个动作(和/或其视图)中多次调用该方法,它当前编码的方式会对您有所帮助,但我怀疑是这种情况。相反,如果您尝试将此变量保留在多个页面中,则需要使用会话变量。所以你可以说:
def find_public_page(title)
session[:footer_public_pages] ||= PublicPage.where(title: %w(welcome_to_toylist terms_of_services buying_a_toy selling_a_toy requesting_a_toy ad_guildelines))
session[:footer_public_pages].find_by(title: title)
end
如果你遵循这种方法,只需要警告这些会话变量只会在用户关闭浏览器时转储(而不是当他们离开你的网站时),所以你必须小心管理它们。