2

我希望在我的 rails 应用程序的每个页面上从我的数据库中的单个表中加载单个(随机选择)对象。

例如,一个引号表中有几个引号,我只希望在每个页面加载时都有一个。

实现这一目标的最佳方法是什么?显然,将查询复制并粘贴到每个控制器中并不是解决此问题的正确方法。

4

3 回答 3

3

我不会before_filter为此使用,不需要访问数据库以重定向操作和其他“未呈现”操作。相反,我会使用helper_function,并且我会在布局中调用它,因为无论如何您都需要定位它。

def random_quote
  @quote ||= "Select random quote here"
end

helper_method :random_quote

您选择报价的方法取决于您。您只需要random_quote在布局中作为普通的辅助方法进行访问。仅当呈现布局时,每个操作只能访问一个引用。

于 2012-08-06T10:02:10.263 回答
1

这种东西通常进入before_filterApplicationController :

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 解决方案似乎更聪明。只有当您实际输出某些内容时,才会调用该请求。什么都没有浪费。

于 2012-08-06T01:29:28.513 回答
0

假设 PostgreSQL:

before_filter :get_quote

def get_quote
  @quote = Quote.order('RANDOM()').limit(1)
end
于 2012-08-06T09:43:16.173 回答