我正在尋找從我的數據庫中的每個頁面上的應用程序的單個表中加載一個單一的(隨機選擇的)對象。從每個頁面上的模型加載對象?
例如,在表格中有幾個引號的引號表格,我只希望在每個頁面上加載一個引號。
完成此操作的最佳方法是什麼?很明顯,複製&將查詢粘貼到每個控制器中並不是正確的方法。
我正在尋找從我的數據庫中的每個頁面上的應用程序的單個表中加載一個單一的(隨機選擇的)對象。從每個頁面上的模型加載對象?
例如,在表格中有幾個引號的引號表格,我只希望在每個頁面上加載一個引號。
完成此操作的最佳方法是什麼?很明顯,複製&將查詢粘貼到每個控制器中並不是正確的方法。
我不會用before_filter
這一點,就沒有必要來訪問重定向行爲等「不渲染」的行爲數據庫。相反,我會使用helper_function
,並且我會在佈局中調用它,因爲無論如何您都需要定位它。
def random_quote
@quote ||= "Select random quote here"
end
helper_method :random_quote
您選擇報價的方式取決於您。你只需要在佈局中作爲普通的輔助方法訪問random_quote
。只有在渲染布局的情況下,每次操作只能訪問一個報價。
這種東西通常進入到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解決方案似乎更聰明。只有當你實際輸出某些東西時,請求才會被調用。沒有什麼是浪費的。
假設的PostgreSQL:
before_filter :get_quote
def get_quote
@quote = Quote.order('RANDOM()').limit(1)
end