我希望在我的rails应用程序的每个页面上从我的数据库中的单个表中加载一个(随机选择)对象。
例如,引用表在表中有几个引号,我只想在每个页面加载一个。
实现这一目标的最佳方法是什么?显然复制&将查询粘贴到每个控制器中并不是解决此问题的正确方法。
答案 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