我希望在我的 rails 应用程序的每个页面上从我的数据库中的单个表中加载单个(随机选择)对象。
例如,一个引号表中有几个引号,我只希望在每个页面加载时都有一个。
实现这一目标的最佳方法是什么?显然,将查询复制并粘贴到每个控制器中并不是解决此问题的正确方法。
我希望在我的 rails 应用程序的每个页面上从我的数据库中的单个表中加载单个(随机选择)对象。
例如,一个引号表中有几个引号,我只希望在每个页面加载时都有一个。
实现这一目标的最佳方法是什么?显然,将查询复制并粘贴到每个控制器中并不是解决此问题的正确方法。
我不会before_filter
为此使用,不需要访问数据库以重定向操作和其他“未呈现”操作。相反,我会使用helper_function
,并且我会在布局中调用它,因为无论如何您都需要定位它。
def random_quote
@quote ||= "Select random quote here"
end
helper_method :random_quote
您选择报价的方法取决于您。您只需要random_quote
在布局中作为普通的辅助方法进行访问。仅当呈现布局时,每个操作只能访问一个引用。
这种东西通常进入before_filter
ApplicationController :
before_filter :get_random_quote
#This code is executed before every action of your app
def get_random_quote
random_id = ...#Generate a random ID ...
@random_quote = Quote.find(random_id)
end
那么在你看来,只是参考@random_quote
。完毕!
编辑:再想一想,Matzi 解决方案似乎更聪明。只有当您实际输出某些内容时,才会调用该请求。什么都没有浪费。
假设 PostgreSQL:
before_filter :get_quote
def get_quote
@quote = Quote.order('RANDOM()').limit(1)
end