在每个页面上从模型加载对象?

时间:2012-08-06 00:55:43

标签: ruby-on-rails-3

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

例如,引用表在表中有几个引号,我只想在每个页面加载一个。

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

3 个答案:

答案 0 :(得分:3)

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

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

helper_method :random_quote

您选择报价的方法取决于您。您只需要在布局中访问random_quote作为常规辅助方法。只有在渲染布局时,每个操作才能访问一个引号。

答案 1 :(得分:1)

这种东西通常会进入ApplicationController中的before_filter

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解决方案看起来更聪明。只有在您实际输出内容时才会调用该请求。什么都没有浪费。

答案 2 :(得分:0)

假设PostgreSQL:

before_filter :get_quote

def get_quote
  @quote = Quote.order('RANDOM()').limit(1)
end